迴圈
輸入T
迴圈
輸入邊長
並記錄個數
將邊長小到大排之
如此可保第三邊必為斜邊
先決定兩股
再判別斜邊是否存在
若存在,則加上該數之個數
輸出答案
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
int main()
{
int T, N;
int LEN[101];
int num[101];
int ans; //targetSquare
while(cin >> T)
{
while(T--)
{
cin >> N;
memset(num, 0, sizeof(num));
for(int i = 0; i<N; i++)
{
cin >> LEN[i];
num[LEN[i]]++;
}
sort(LEN, LEN+N);
ans = 0;
for(int i = 0; i<N-2; i++)
for(int j = i+1, tarSq, sqTarSq; j<N-1; j++)
{
tarSq = LEN[i]*LEN[i] + LEN[j]*LEN[j];
sqTarSq = sqrt(tarSq);
if(sqTarSq * sqTarSq != tarSq || num[sqTarSq] == 0 || sqTarSq > 100)
continue;
ans += num[sqTarSq];
}
cout << ans << endl;
}
}
return 0;
}
留言列表