题目链接:http://oj.ecustacm.cn/problem.php?id=1250
分析:
三个未知变量,对于符合情况的三个数,如果赋给不同的变量,就会有不同的结果,这里只保留一组
依题意,可以用三层for循环,细节地方注意:每一层,涉及到几个变量,它的平方和都是小于等于n
代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
int n;
int flag;
while(~scanf("%d",&n))
{
flag=0;
for(int i=1; i<=n; i++)/*对于每一次循环,都保证k>=j>=i,这样保证多解时,只保留一组解*/
{
for(int j=i; i*i+j*j<=n; j++)/*每一层,涉及到几个变量,它的平方和都是小于等于n*/
{
for(int k=j; i*i+j*j+k*k<=n; k++)
{
if(i*i+j*j+k*k==n)
{
flag=1;
printf("%d %d %d\n",i,j,k);
}
}
}
}
if(flag==0)
printf("No Solution\n");
}
return 0;
}