蓝桥杯--四平方和

问题描述

四平方和定理,又称为拉格朗日定理:每个正整数都可以表示为至多四个正整数的平方和。如果把0包括进去,就正好可以表示为四个数的平方和。 
比如: 
5=0*0+0*0+1*1+2*2 
7=1*1+1*1+1*1+2*2 
则对于一个给定的正整数n,可以表示为:n = a^2 + b^2 + c^2 + d^2 
你需要求出 字典序 最小的一组解 a,b,c,da,b,c,d。 
输入格式 
程序输入为一个正整数 (N<=5000000) 
输出格式 
输出四个非负整数 a,b,c,d中间用空格分开。 
样例输入1 

样例输出1 
0 0 1 2 
样例输入2 
12 
样例输出2 
0 2 2 2

 

C语言代码

#include<stdio.h>
#include<stdlib.h>
using namespace std;
int main(){
    int n;
    scanf("%d",&n);
    for(int a=0;a<2500;a++){
        for(int b=0;b<2500;b++){
            for(int c=0;c<2500;c++){
                for(int d=0;d<2500;d++){
                    if(a*a+b*b+c*c+d*d==n){
                        printf("%d %d %d %d\n",a,b,c,d);
                        exit(0);
                    }
                }
            }
        }
    }
    return 0;
} 

运行超时!!!

 

 

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
using namespace std;
int main(){
    int n,d1;
    double d;
    scanf("%d",&n);
    for(int a=0;a<=sqrt(n);a++){
        for(int b=0;b<=sqrt(n);b++){
            for(int c=0;c<=sqrt(n);c++){
                d=n-(a*a+b*b+c*c);
                d1=int(sqrt(d));
                if(d==d1*d1){
                    printf("%d %d %d %d",a,b,c,d1);
                        exit(0);
                }
                        
                
            }
        }
    }
    return 0;
} 

运行正常

 

posted @ 2018-03-10 15:55  柠檬不酸i  阅读(193)  评论(0编辑  收藏  举报