勾股定理

来源:互联网 发布:devc for linux 编辑:程序博客网 时间:2024/04/29 06:34

题目描述

给N个数,判断这N个数中存在多少组勾股数(勾股数:存在三个数满足a*a + b*b = c*c)。

输入

第一行输入一个数T(1<=T<=50),表示有T组数据。
每组数据输入一个N(1<=N<=1000)。
接下来N个数ai(1<=ai<=10^9)。

输出

每组数据输出一行,表示有多少组勾股数。

示例输入

344 3 5 34 6 7 8 1056 7 8 9 5

示例输出

210
#include<stdio.h>#include<string.h>#include<math.h>int main(){    int T,n,a[10010];    scanf("%d",&T);    int b[10010],i,j;    while(T--)    {        int count = 0;        scanf("%d",&n);        for(i=0;i<n;i++)        {            scanf("%d",&a[i]);        }        int r = 0;        for(i=0;i<n;i++)        {            for(j=i;j<n;j++)            {                double k;               k = sqrt(a[i]*a[i] + a[j]*a[j]);               int t;               t = k;               if(k - t == 0)               {                   b[r++] = t;               }            }        }        for(i=0;i<r;i++)        {            for(j=0;j<n;j++)            {                if(a[j] == b[i])                {                    count++;                }            }        }        printf("%d\n",count);    }    return 0;} 

0 0