勾股定理
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
给N个数,判断这N个数中存在多少组勾股数(勾股数:存在三个数满足a*a + b*b = c*c)。
输入
第一行输入一个数T(1<=T<=50),表示有T组数据。
每组数据输入一个N(1<=N<=1000)。
接下来N个数ai(1<=ai<=10^9)。
输出
每组数据输出一行,表示有多少组勾股数。
示例输入
3
4
4 3 5 3
4
6 7 8 10
5
6 7 8 9 5
示例输出
2
1
0
#include <bits/stdc++.h>
#define LL long long
using namespace std;
LL a[1010];
int main()
{
//freopen("in.txt","r",stdin);
std::ios::sync_with_stdio(false);
int T,n;
cin>>T;
while(T--)
{
cin>>n;
int ant = 0;
for(int i=0;i<n;i++)
cin>>a[i];
sort(a,a+n);
for(int i=0;i<n;i++)
{
int vis = i+1;
for(int j=vis;j<n;j++)
{
for(;vis<n;vis++)
{
if(a[i] * a[i] + a[j] * a[j] == a[vis] * a[vis])
ant++;
else if(a[i] * a[i] + a[j] * a[j] < a[vis] * a[vis])
break;
}
}
}
cout<<ant<<endl;
}
return 0;
}