勾股定理
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<iostream>
#include<math.h>
#include<algorithm>
#include<stdio.h>
#include<string.h>
using namespace std;
#define LL long long
LL a[1001];
int main()
{
int T, n;
scanf("%d", &T);
while(T--)
{
scanf("%d", &n);
for(int i =0; i<n; i++)
{
scanf("%lld", &a[i]);
a[i] = a[i]*a[i];
}
sort(a, a+n);
int num = 0;
for(int i=0; i<n; i++)
for(int j=i+1; j<n; j++)
{
LL p = a[i] + a[j];
LL q = sqrt(p);
if(q*q!=p) continue;
for(int k=j+1; k<n; k++)
{
if(a[k] > p) break;
if(a[k] == p) num++;
}
}
cout<<num<<endl;
}
return 0;
}
<a