http://oj.ecustacm.cn/problem.php?id=1250
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
int main(void)
{
int a,b,c;
int n;
while(cin>>n)
{
bool flag=false;
int max=sqrt(n)+1;
for(a=1;a<=max;a++)
{
for(b=a;b<=max;b++)
{
for(c=b;c<=max;c++)
{
if(a*a+b*b+c*c==n)
{
flag=true;
printf("%d %d %d\n",a,b,c);
}
}
}
}
if(!flag)
{
printf("No Solution\n");
}
}
return 0;
}
下面代码居然比上种方法慢
#include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
int n;
int main(void)
{
while(cin>>n)
{
bool flag=false;
for(int i=1;pow(i,2)<=n;i++)
{
for(int j=i;pow(i,2)+pow(j,2)<=n;j++)
{
for(int k=j;k<=200;k++)
{
int temp=pow(i,2)+pow(j,2)+pow(k,2);
if(temp==n)
{
flag=true;
cout<<i<<" "<<j<<" "<<k<<endl;
}
}
}
}
if(!flag) cout<<"No Solution"<<endl;
}
return 0;
}