题目:
大家提到LTC都佩服的不行,不过,如果竞赛只有这一个题目,我敢保证你和他绝对在一个水平线上!
你的任务是:计算方程x^2+y^2+z^2= num的一个正整数解。
Input
输入数据包含多个测试实例,每个实例占一行,仅仅包含一个小于等于10000的正整数num。
Output
对于每组测试数据,请按照x,y,z递增的顺序输出它的一个最小正整数解,每个实例的输出占一行,题目保证所有测试数据都有解。
Sample Input
3
Sample Output
1 1 1
思路:暴力求解,遍历可能的结果,不断试错。
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
#include<cstdio> #include<iostream> using namespace std; int main() { int x,y,z; int a; bool ans = false; ///照例立个flag; while(cin >> a) { if(ans) { break; } else { for(x = 1; x < 100; x ++) ///遍历x可能的取值; { if(ans) { break; } else { for(y = 1; y < 100; y ++) ///遍历y可能的值; { if(ans) ///如果ans为真则退出循环; { break; } else { for(z = 1; z < 100; z ++) ///遍历z可能的值; { int tmp = x*x + y*y + z*z; if(tmp == a) ///如果条件满足证明找对了; { cout << x << " " << y << " " << z << endl; ans = true; ///flag举起来,把ans变为真; } } } } } } } ans = false; ///ans重新初始化为false,进行下一组数据; } return 0; } |