YACS四方定理
这道题看似挺难,其实抓住关键就很方便,因为数据不大,所以我们可以暴力枚举亿下下,四个for:
for(int a=0;a*a<=x/4;a++)
for(int b=a;b*b<=x/3;b++)
for(int c=b;c*c<=x/2;c++)
for(int d=c;d*d<=x/1;d++)
我们可以大胆地把它们放在一列,每次分配的越来越少。且初始值也有变化,为的是不重复。
if(a*a+b*b+c*c+d*d==x)printf("%d %d %d %d\n",a,b,c,d);
然后一个if搞定。
最终代码:
#include<bits/stdc++.h>
using namespace std;
int main(){int x;cin>>x;for(int a=0;a*a<=x/4;a++)for(int b=a;b*b<=x/3;b++)for(int c=b;c*c<=x/2;c++)for(int d=c;d*d<=x/1;d++)if(a*a+b*b+c*c+d*d==x)printf("%d %d %d %d\n",a,b,c,d);return 0;
}
谢谢!求点赞!
YACS四方定理
这道题看似挺难,其实抓住关键就很方便,因为数据不大,所以我们可以暴力枚举亿下下,四个for:
for(int a=0;a*a<=x/4;a++)
for(int b=a;b*b<=x/3;b++)
for(int c=b;c*c<=x/2;c++)
for(int d=c;d*d<=x/1;d++)
我们可以大胆地把它们放在一列,每次分配的越来越少。且初始值也有变化,为的是不重复。
if(a*a+b*b+c*c+d*d==x)printf("%d %d %d %d\n",a,b,c,d);
然后一个if搞定。
最终代码:
#include<bits/stdc++.h>
using namespace std;
int main(){int x;cin>>x;for(int a=0;a*a<=x/4;a++)for(int b=a;b*b<=x/3;b++)for(int c=b;c*c<=x/2;c++)for(int d=c;d*d<=x/1;d++)if(a*a+b*b+c*c+d*d==x)printf("%d %d %d %d\n",a,b,c,d);return 0;
}
谢谢!求点赞!