第七届蓝桥杯 四平方和

2018-06-17 21:19:42来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

转载请注明出处:http://www.cnblogs.com/zhishoumuguinian/p/8372337.html

四平方和定理,又称为拉格朗日定理:每个正整数都可以表示为至多4个正整数的平方和。如果把0包括进去,就正好可以表示为4个数的平方和。比如:5 = 0^2 + 0^2 + 1^2 + 2^2    7 = 1^2 + 1^2 + 1^2 + 2^2   (^符号表示乘方的意思)对于一个给定的正整数,可存在多种平方和的表示法。要求你对4个数排序:0 <= a <= b <= c <= d。并对所有的可能表示法按 a,b,c,d 为联合主键升序排列,最后输出第一个表示法。程序输入为一个正整数N (N<5000000),要求输出4个非负整数,按从小到大排序,中间用空格分开

例如,输入:
5
则程序应该输出:
0 0 1 2

再例如,输入:
12
则程序应该输出:
0 2 2 2

再例如,输入:
773535
则程序应该输出:
1 1 267 838

资源约定:
峰值内存消耗 < 256M
CPU消耗 < 3000ms

请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

注意: main函数需要返回0
注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。
注意: 所有依赖的函数必须明确地在源文件中 #include <xxx>, 不能通过工程设置而省略常用头文件。

提交时,注意选择所期望的编译器类型。

 

思路:四个数的平放,第一想法是四层循环,但是最后一层循可以省略。每层循环到sqrt(5000000)+1即可,可以先输出一下,sqrt(5000000)+1值为2237。大题思路就是这样,接下来粘上代码。

 1 #include <iostream>
 2 #include <cmath>
 3 using namespace std;
 4 
 5 
 6 int main()
 7 {
 8     int  n;
 9      cin>>n;
10     //n=5000000;
11     for(int a=0; a<=2237; a++)
12     {
13         for(int b=0; b<=2237; b++)
14         {
15             for(int c=0; c<=2237; c++)
16             {
17                 int dj=n-a*a-b*b-c*c;
18                 int d=sqrt(dj);
19                 if(dj==d*d)//如果dj等于d的平方,第四位数是一个整数的平方,这个整数d就是第四位数
20                 {
21                 cout<<a<<" "<<b<<" "<<c<<" "<<d;
22                 return 0;
23                 }
24             }
25         }
26     }
27 }

题目限制时间是3秒

计算的5000000,DEV-C++执行时间           CODEBLOCKS执行时间

                   

如果本文对你有帮助,请给个??,谢谢。。。。。。。。。

 

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:hdu 1078

下一篇:Binary mod and divide(模拟+大数)