四平方和

解析

基本解法是暴力枚举,如果暴力枚举四个数的话程序的复杂度就过高了,因此枚举出a,b,c,由此可以计算出c^2,如果c^2开方过后的值(定为flag)再平方后不等于c^2(即根号下c不为整数),那么这组数据就不合法,继续枚举。

反之则直接输出。

代码

#include<bits/stdc++.h>
using namespace std;
int n;
int main()
{
    cin>>n;
    for(int a=0;a<=3000;a++)
    {
        for(int b=a;b<=3000;b++)
        {
            for(int c=b;c<=3000;c++)//题目给的最大值是5000000,所以只考虑根号5000000附近向上取枚举极限 
            {
                int flag=n-(a*a+b*b+c*c);
                int d=sqrt(flag);
                if(d*d!=flag) continue;
                else {
                cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl;
                goto u;
          }
            }
        }
    }
    u:return 0;
 } 
原文地址:https://www.cnblogs.com/KyleDeng/p/9221939.html