ได้รับอาร์เรย์ N ตัว ต้องการนับคู่ (i,j) ที่ i≠j และ Arr[i]+Arr[j] เป็นกำลังสองสมบูรณ์ (perfect square)
ตัวอย่าง
อินพุต: Arr[] = {4, 3, 2, 1, 2, 4}, N = 6
เอาต์พุต: 2
คำอธิบาย: Arr[1]+Arr[3]=4, Arr[2]+Arr[4]=4 (4 = 2²)
อินพุต: Arr[] = {3, 3, 3, 3, 3}, N = 5
เอาต์พุต: 0 (ผลรวมทุกคู่ = 6 ไม่ใช่กำลังสอง)
แนวทาง
- ลูปซ้อน 2 ชั้น i=0..n-2, j=i+1..n-1
- คำนวณ sum = arr[i]+arr[j]
- หา
sqr = sqrt(sum)ถ้าsqr - floor(sqr) == 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