HDU-1407 测试你是否和LTC水平一样高

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

  

posted @ 2011-08-15 22:16  沐阳  阅读(428)  评论(0编辑  收藏  举报