闲聊蓝桥杯JAVA - 四平方和

D:这道题有一点复杂,看了

四平方和四平方和定理,又称为拉格朗日定理:
每个正整数都可以表示为至多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

Z:这道题有一个简单,但是不是很优的做法。

    public static void main(String[] args) {Scanner input =new Scanner(System.in);int num = input.nextInt();double maxNum= Math.sqrt(5000000);for (int i = 0; i <maxNum; i++) {for (int j = i; j < maxNum; j++) {for (int k = j; k < maxNum; k++) {int l=(int)Math.sqrt(num-i*i-j*j-k*k);if(i*i+j*j+k*k+l*l==num){System.out.println(i+" "+j+" "+k+" "+l);return;}}}}       }

M:为什么要double maxNum= Math.sqrt(5000000); ?

Z:尽力缩小最大值的范围,因为是平方,最大不会超过开方的数。

M:暴力破解为什么每次从上个数开始?

        for (int i = 0; i <maxNum; i++) {for (int j = i; j < maxNum; j++) {for (int k = j; k < maxNum; k++) {

Z:还是一样,因为数字逐个递增,尽量减少不必要的循环。

M:那为什么只循环三个数呢?

Z:因为只要三个数确定,最后一个数也就确定了。算出那个数,并且进行校验即可。

                    int l=(int)Math.sqrt(num-i*i-j*j-k*k);if(i*i+j*j+k*k+l*l==num){System.out.println(i+" "+j+" "+k+" "+l);return;}

M:总结这道题目,主要就是尽量减少循环的次数。

1.减少循环的最大值。2.for循环从上个数开始。3.第4个数通过其他3个数确定。

最后进行验证。

闲聊蓝桥杯JAVA - 四平方和相关推荐

  1. 闲聊蓝桥杯JAVA - 罗马数字

    罗马数字 D:这道题解法不难,但是主要是研究对于特殊值我们的处理方式: 古罗马帝国开创了辉煌的人类文明,但他们的数字表示法的确有些繁琐,尤其在表示大数的时候,现在看起来简直不能忍受,所以在现代很少使用 ...

  2. 闲聊蓝桥杯JAVA - 路径之谜

    路径之谜 D:来一道通用的题目,路径行走 路径之谜小明冒充X星球的骑士,进入了一个奇怪的城堡. 城堡里边什么都没有,只有方形石头铺成的地面.假设城堡地面是 n x n 个方格.[如图1.png]所示. ...

  3. 闲聊蓝桥杯JAVA - 填字母游戏

    填字母游戏 D:今天是一道很有游戏感的题目(只是蹭LOL热度): 标题:填字母游戏小明经常玩 LOL 游戏上瘾,一次他想挑战K大师,不料K大师说: "我们先来玩个空格填字母的游戏,要是你不能 ...

  4. 2016年 第7届 蓝桥杯 Java B组 省赛解析及总结

    蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2021年(第12届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:部分 ...

  5. 2016蓝桥杯b组java试题及答案_2016年第七届蓝桥杯java B组省赛试题

    2016年第七届蓝桥杯java B组省赛试题 1-3.结果填空 4-5.代码填空 6-7.结果填空 8-10.程序设计 1.煤球数目  (结果填空) 有一堆煤球,堆成三角棱锥形.具体: 第一层放1个, ...

  6. 蓝桥杯Java历年真题与答案_蓝桥杯大赛java历年真题及答案整理(闭关一个月呕心沥血整理出来的)...

    蓝桥杯大赛java历年真题及答案整理(闭关一个月呕心沥血整理出来的) 1蓝桥杯 java 历年真题及答案整理(闭关一个月,呕心沥血整理出来的)1. 算法是这样的,如果给定 N 个不同字符,将这 N 个 ...

  7. 2015年 第06届 蓝桥杯 Java B组 决赛真题详解及小结

    蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:大部 ...

  8. 2016年 第07届 蓝桥杯 Java B组 决赛真题详解及小结

    蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:大部 ...

  9. 2017年 第08届 蓝桥杯 Java B组 决赛真题详解及小结

    ​​​​​蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 ...

最新文章

  1. bash shell命令(2)
  2. JavaScript学习笔记(备忘录)
  3. matlab找数据的转账点,nodejs开发EOS转账服务的两种方案
  4. 前端学习(2713):重读vue电商网站33之实现首页路由重定向
  5. Linux 安装 jdk ( 两种方式 )
  6. 配置jdk1.7的环境变量
  7. 【每日算法Day 85】图解算法:一行代码解决约瑟夫环的变体
  8. php课设报告致谢_奇安信CERT发布1月安全监测报告:需警惕这19个高危漏洞
  9. PHP正则表达式检查日期是YYYY-MM-DD格式
  10. h5页面如何切图_前端切图H5/网页切图/移动自适应H5/切图开发/H5响应式
  11. maven添加ojdbc6.jar包
  12. 视频:使用chrome谷歌浏览器下载任意网页上的视频
  13. win7没有显示wifi连接到服务器,Win7笔记本电脑搜不到无线网络(Wifi)怎么办?...
  14. 写字机器人制作教程 midt-bot
  15. 2020最新中高阶Android面试题总结-上(附解题思路)
  16. 一学期c语言的学习总结
  17. oracle jmf下载,Ubuntu/Linux下安装JMF播放媒体文件
  18. kali liunx使用心得之命令行模式下如何配置连接无线网络
  19. 京东移动端首页-流式布局
  20. weui学习总结——1、weui表单常用标签

热门文章

  1. C#中{ get; set; }写法是什么意思
  2. Unity3d 使用OpenCV插件报错:Unsafe code may only appear if compiling with /unsafe.解决方法
  3. 人大计算机应用同等学力申硕,人民大学同等学力申硕
  4. ultraedit反编译c语言,把Ultraedit变成一个IDE(C++)
  5. truffle init/unbox时遇到 Got error: connect ECONNREFUSED 151.101.196.133:443. Please check the format
  6. Microsoft Word 2010 - 超链接
  7. 企业网站为何喜欢选择织梦系统?织梦cms的好处有哪些?
  8. 你熟悉他们使用的计算机软件吗,软件英文怎么说
  9. linux qt “QXcbIntegration: Cannot create platform OpenGL context, neither GLX nor EGL are enable“
  10. Python Folium 绘制交互式地图