Cho mảng N phần tử. Đếm cặp không có thứ tự (i Ví dụ 1: Ví dụ 2: M = giá trị lớn nhất trong mảng. Bình phương lớn nhất ≤ 2M.Ví dụ minh họa
Mã nguồn C++
#include <bits/stdc++.h>
#include <cmath>
using namespace std;
int countPairs(int arr[], int n) {
int count = 0;
for (int i = 0; i < n - 1; i++) {
for (int j = i + 1; j < n; j++) {
int sum = arr[i] + arr[j];
double 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 << "Cap co tong la binh phuong hoan hao: " << countPairs(arr, n);
return 0;
}
Kết quả chạy chương trình
Cap co tong la binh phuong hoan hao: 2Tối ưu hóa O(n × √M) - Duyệt bình phương
#include <bits/stdc++.h>
using namespace std;
long long countPairsOptimized(vectorĐộ phức tạp
Phương pháp Thời gian Không gian Vét cạn O(n²) O(n²) O(1) Duyệt bình phương + Hash O(√M × distinct) O(distinct)