失败
算法复杂度 = 300030003000
#include <iostream>
#include <cmath>
using namespace std;
int datas[10000]{0};
int gs(int n){
return n*n;
}
int bos;
int n;
void dfs(int lim, int deep){
int sum = 0;
if(deep == 3 && bos) {
for(int i = 0; i < deep;i++){
sum += gs(datas[i]);
}
datas[3] = sqrt(n - sum);
sum+=gs(datas[3]);
if(sum == n){
for(int i = 0; i < 4;i++){
cout << datas[i] <<" ";
}
bos = 0;
}
return;
}
if(bos){
for(int i = 0; i <= lim;i++){
datas[deep] = i;
dfs(lim,deep+1);
}
}else{
return;
}
}
int main(){
cin >> n;
int lim = (int)sqrt(n);
// cout << lim;
bos = 1;
dfs(lim,0);
}
直接三层暴力【失败】
#include <iostream>
#include <cmath>
using namespace std;
int gn(int n){
return n*n;
}
int main(){
int n;
cin >> n;
int lim = sqrt(n);
int a,b,c,d;
int sign = 1;
for(int a = 0; a <= lim && sign;a++){
for(int b = a; b<= lim && sign ;b++){
for(int c = b; c <= lim && sign ; c++){
for(d = c; d <= lim && sign; d++){
if(gn(a)+gn(b)+gn(c)+gn(d) == n){
cout << a << " " << b << " " << c << " " << d;
sign = 0;
}
}
}
}
}
}