Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

นับคู่ไม่ลำดับที่ผลคูณเป็นกำลังสอง ใน C++

หมายเหตุ: โจทย์ระบุว่า "ผลคูณเป็นกำลังสอง" แต่ตัวอย่างและโค้ดตรวจสอบ "ผลรวมเป็นกำลังสองสมบูรณ์" (perfect square) — นี่คือการนับคู่ที่ผลรวมเป็นกำลังสอง

ตัวอย่าง (สำหรับผลรวมเป็นกำลังสอง)

อินพุต: Arr[] = {4, 3, 2, 1, 2, 4}, N = 6

เอาต์พุต: 2

คำอธิบาย: Arr[1]+Arr[3]=4, Arr[2]+Arr[4]=4 (4 เป็นกำลังสอง)

แนวทาง (สำหรับผลรวมเป็นกำลังสอง)

  • ลูปซ้อน 2 ชั้น i=0..n-2, j=i+1..n-1
  • คำนวณ sum = arr[i]+arr[j]
  • ตรวจสอบ sqrt(sum) - floor(sqrt(sum)) == 0

ตัวอย่างโค้ด C++ (ตรวจสอบผลรวมเป็นกำลังสอง)

#include <bits/stdc++.h>
#include <math.h>
using namespace std;

int countPairs(int arr[], int n) {
    int count = 0;
    int sum = 0;
    double sqr = 0;
    for (int i = 0; i < n-1; i++) {
        for (int j = i+1; j < n; j++) {
            sum = arr[i] + arr[j];
            sqr = sqrt(sum);
            if (sqr - floor(sqr) == 0) {
                count++;
            }
        }
    }
    return count;
}

int main() {
    int arr[] = {1, 2, 4, 8, 5, 6};
    int n = sizeof(arr) / sizeof(int);
    cout << endl << "Pairs whose sum is perfect square: " << countPairs(arr, n);
    return 0;
}

ผลลัพธ์

Pairs whose sum is perfect square: 2