解析
基本解法是暴力枚举,如果暴力枚举四个数的话程序的复杂度就过高了,因此枚举出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