书山小站

记录我的程序人生

[算法]四平方和

请输入图片描述

失败

算法复杂度 = 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;
                } 
              }
            
            }
        }
    }
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注