迴圈

輸入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;
}

arrow
arrow
    全站熱搜

    大神(偽) 發表在 痞客邦 留言(0) 人氣()