题目要求 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; }