题目

四平方和定理,又称为拉格朗日定理:
每个正整数都可以表示为至多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 , 不能通过工程设置而省略常用头文件。

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

代码

#include <iostream>
#include <cstdio>
#include <map>
#include <cmath>
using namespace std;int N;
map<int,int>cache;
int main(int argc, const char * argv[]) {scanf("%d",&N);for (int c = 0; c*c <=N/2 ; ++c) {for (int d = c; c*c+d*d <= N; ++d) {if(cache.find(c*c+d*d)==cache.end())cache[c*c+d*d]=c;}}for (int a = 0; a*a <=N/4 ; ++a) {for (int b = a; a*a+b*b<=N/2 ; ++b) {if(cache.find(N-a*a-b*b)!=cache.end()){int c = cache[N-a*a-b*b];int d=int(sqrt(N-a*a-b*b-c*c));printf("%d %d %d %d\n",a,b,c,d);return 0;}}}return 0;
}

简单代码

#include <iostream>
#include <cmath>
using namespace std;
bool is_int(int x)
{double a=sqrt(x);int b=a;return a-b==0?true:false;
}
int main()
{int n;cin>>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++){int x1=a*a+b*b+c*c;if(is_int(n-x1)){int d=n-x1;cout<<a<<' '<<b<<' '<<c<<' '<<sqrt(d)<<endl;goto stop;}}}}stop:return 0;
}

征战蓝桥 —— 2016年第七届 —— C/C++A组第8题——四平方和相关推荐

  1. 征战蓝桥 —— 2016年第七届 —— C/C++A组第10题——最大比例

    题目 X星球的某个大奖赛设了M级奖励.每个级别的奖金是一个正整数. 并且,相邻的两个级别间的比例是个固定值. 也就是说:所有级别的奖金数构成了一个等比数列.比如: 16,24,36,54 其等比值为: ...

  2. 征战蓝桥 —— 2016年第七届 —— C/C++A组第3题——方格填数

    题目 如下的10个格子 (如果显示有问题,也可以参看[图7-1.jpg]) 填入0~9的数字.要求:连续的两个数字不能相邻. (左右.上下.对角都算相邻) 一共有多少种可能的填数方案? 请填写表示方案 ...

  3. 征战蓝桥 —— 2016年第七届 —— C/C++A组第7题——剪邮票

    剪邮票 如[图1.jpg], 有12张连在一起的12生肖的邮票. 现在你要从中剪下5张来,要求必须是连着的. (仅仅连接一个角不算相连) 比如,[图2.jpg],[图3.jpg]中,粉红色所示部分就是 ...

  4. 征战蓝桥 —— 2016年第七届 —— C/C++A组第5题——消除尾一

    题目 下面的代码把一个整数的二进制表示的最右边的连续的1全部变成0 如果最后一位是0,则原数字保持不变. 如果采用代码中的测试数据,应该输出: 0000000000000000000000000110 ...

  5. 征战蓝桥 —— 2016年第七届 —— C/C++A组第2题——生日蜡烛

    题目 某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛. 现在算起来,他一共吹熄了236根蜡烛. 请问,他从多少岁开始过生日party的? 请填写他开始过生日party ...

  6. 征战蓝桥 —— 2016年第七届 —— C/C++A组第4题——快速排序

    题目 排序在各种场合经常被用到. 快速排序是十分常用的高效率的算法. 其思想是:先选一个"标尺", 用它把整个队列过一遍筛子, 以保证:其左边的元素都不大于它,其右边的元素都不小于 ...

  7. 征战蓝桥 —— 2015年第六届 —— C/C++A组第10题——灾后重建

    题目 Pear市一共有N(<=50000)个居民点,居民点之间有M(<=200000)条双向道路相连.这些居民点两两之间都可以通过双向道路到达. 这种情况一直持续到最近,一次严重的地震毁坏 ...

  8. 征战蓝桥 —— 2015年第六届 —— C/C++A组第5题——九数组分数

    九数组分数 1,2,3-9 这九个数字组成一个分数,其值恰好为1/3,如何组法? 下面的程序实现了该功能,请填写划线部分缺失的代码. #include <stdio.h>void test ...

  9. 征战蓝桥 —— 2015年第六届 —— C/C++A组第4题——格子中输出

    格子中输出 StringInGrid函数会在一个指定大小的格子中打印指定的字符串. 要求字符串在水平.垂直两个方向上都居中. 如果字符串太长,就截断. 如果不能恰好居中,可以稍稍偏左或者偏上一点. 下 ...

最新文章

  1. KVM — 安装部署
  2. UVa12467 Secret Word(kmp)
  3. Docker 新网络 overlay 网络
  4. python和表格关系_数据表之多表关联
  5. 如何使用 Istio 进行多集群部署管理:多控制平面
  6. sql2008 sql服务_SQL即服务
  7. Nodejs 中的Get、Post
  8. 房地产税迟早要来,而且会带来房价小涨。
  9. php 分词技术,php实现的中文分词类完整实例
  10. 发布一套IOCP框架
  11. Vue.js 源码分析(十七) 指令篇 v-if、v-else-if和v-else 指令详解
  12. 深入剖析 redis 主从复制
  13. 基于R语言、MATLAB、Python机器学习方法与案例分析
  14. Linux debian解压和压缩.rar文件教程
  15. 百度指数 爬虫 其实主要是破解
  16. 国内手机市场寒风持续,华为与OV竞争将更激烈
  17. 多巴胺PEG多巴胺,Dopamine-PEG-Dopamine
  18. 创建vue3项目(vite+js)
  19. 电脑文件夹的展示方式
  20. Ubuntu20.04LTS环境下载STM32程序

热门文章

  1. C#数组和集合专题4(Hashtable类)
  2. ASP.NET 2.0便捷数据访问
  3. COM本质论学习笔记(一)IDL
  4. 哈佛大学计算机与科学,Harvard的CS「哈佛大学计算机科学专业」
  5. ftp定期任务linux,Linux FTP服务器搭建和crontab计划任务制定
  6. java %1$s_%1$s %1$d Android string (java Android 格式化字符串)
  7. react循环setstate_[React] 8 - React 自身或工程性能优化点?
  8. 每日程序C语言29-将数组逆序输出
  9. c语言如何控制上位机界面大小,电机上位机控制及界面设计参考.doc
  10. linux 同步 多终端,Linux系统如何实现不同终端间的同步