题目要求 x^2 + y^2+ z^2 = N,把 1^2 到 100^2 的平方数保留一份,并且标记一份,后面就使用两重循环就可以了。
代码如下:
#include <cstring>
#include <cstdlib>
#include <cstdio>
using namespace std;
char hash[100005][2];
int rec[105];
int main()
{
for( int i= 1; i<= 100; ++i )
{
rec[i]= i* i;
hash[rec[i]][0]= 1;
hash[rec[i]][1]= i;
}
int N;
while( scanf( "%d", &N )!= EOF )
{
int flag= 0;
for( int i= 1; !flag&& i<= 100; ++i )
{
for( int j= 1; !flag&& rec[i]+ rec[j]< N; ++j )
{
int t= N- rec[i]- rec[j];
if( hash[t][0] )
{
printf( "%d %d %d\n", i, j, hash[t][1] );
flag= 1;
}
}
}
}
return 0;
}