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

Problem Description
大家提到LTC都佩服的不行,不过,如果竞赛只有这一个题目,我敢保证你和他绝对在一个水平线上! 你的任务是: 计算方程x^2+y^2+z^2= num的一个正整数解。
 
Input
输入数据包含多个测试实例,每个实例占一行,仅仅包含一个小于等于10000的正整数num。
 
Output
对于每组测试数据,请按照x,y,z递增的顺序输出它的一个最小正整数解,每个实例的输出占一行,题目保证所有测试数据都有解。
 
Sample Input
3
 
Sample Output
1 1 1
 
Author
lcy

题意:略。

分析:题目有两个地方将问题简化了,只求正整数解,并且只求一个就可以了。巧妙的方法没想到,就是三重循环,不过可以控制一下循环的的次数,循环下限是1,循环上限是num的平方根,详见代码。

AC源代码(C语言):

 1 #include<stdio.h>
 2 #include<math.h>
 3 
 4 int main()
 5 {
 6     int num,x,y,z;
 7     double s;
 8     loop:while(scanf("%d",&num)==1)
 9     {
10         s=sqrt((double)num);
11         for(x=1;x<s;x++)
12             for(y=1;y<s;y++)
13                 for(z=1;z<s;z++)
14                     if(x*x+y*y+z*z==num)
15                        {
16                            printf("%d %d %d\n",x,y,z);
17                            goto loop;
18                        }
19                     else continue;
20     }
21     return 0;
22 }

2013-05-09

原文地址:https://www.cnblogs.com/fjutacm/p/3068976.html