AC代码:
法一:
using namespace std;
const double eps=1e-8;//判断浮点数相等应该用极小值eps来辅助,一般eps取1e-8足够了,确保比题目约定的精度误差要求更小。
#include<bits/stdc++.h>
int main(){
int N;
cin>>N;
int flag=0;
for(int i=0;i<=sqrt(N);i++){
for(int j=i;j<=sqrt(N);j++){
for(int k=j;k<=sqrt(N);k++){
if(sqrt(N-i*i-j*j-k*k)-int(sqrt(N-i*i-j*j-k*k))<=eps){
flag=1;
cout<<i<<" "<<j<<" "<<k<<" "<<sqrt(N-i*i-j*j-k*k)<<endl;
break;
}
}
if(flag==1)
break;
}
if(flag==1)
break;
}
return 0;
}
法二:
using namespace std;
#include<bits/stdc++.h>
int main(){
int N;
cin>>N;
int flag=0;
for(int i=0;i<=sqrt(N);i++){
for(int j=i;j<=sqrt(N);j++){
for(int k=j;k<=sqrt(N);k++){
int d=sqrt(N-i*i-j*j-k*k);
if(i*i+j*j+k*k+d*d==N){
flag=1;
cout<<i<<" "<<j<<" "<<k<<" "<<d<<endl;
break;
}
}
if(flag==1)
break;
}
if(flag==1)
break;
}
return 0;
}