当前位置: 首页 > news >正文

技能树基础——17四平方和(拉格朗日定理,嵌套循环)

题目:

四平方和定理,又称为拉格朗日定理:

每个正整数都可以表示为至多4个正整数的平方和。

如果把0包括进去,就正好可以表示为4个数的平方和。

比如:

5 = 0^ 2 + 0^ 2 + 1^ 2 + 2^27 = 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

分析:

因为题目只需要要一个升序排列的数列,那么我们让每一次循环的开始值都是上一个循环的结束点,这样我们就能确保是升序

首先要建三个循环,分别代表前三个数,那第四个数就是n减去前面三个数的开方,

第一个数的取值范围是n的开方,

第二个取值范围是n减去第一个数的开方

第三个取值范围是n减去第一个数和第二个数的开方

第四个 取值范围是n减去第一个数和第二个数及第三个数的开方

到最后如果四个加起来等于n那么直接输出并结束主函数。

步骤:

用到了math.sqrt开平方的函数

package 刷题211;import java.util.Scanner;public class 四平方和 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();sc.close();for (int i = 0; i <= Math.sqrt(n); i++) {for (int j = i; j <= Math.sqrt(n - i * i); j++) {for (int j2 = j; j2 <= Math.sqrt(n - i * i - j * j); j2++) {int si = (int) Math.sqrt(n - i * i - j * j - j2 * j2);if (n == i * i + j * j + j2 * j2 + si * si) {System.out.println(i + " " + j + " " + j2 + " " + si);return;}}}}}}
http://www.lryc.cn/news/3109.html

相关文章:

  • JPA、EJB、事物管理---相关内容整理
  • C语言学习笔记(一):了解C语言
  • 回头看——《智能家居项目小结》
  • 社交登陆OAuth2.0
  • C++005-C++选择与分支2
  • IPFS 简介及概述
  • 初学者必读:讲解 VC 下如何正确的创建、管理及发布项目
  • 剑指offer(中等)
  • 微软发布会精华回顾:“台式电脑”抢了风头
  • CF1561C Deep Down Below 题解
  • 秒杀项目之服务调用分布式session
  • 聊聊什么是架构,你理解对了吗?
  • java多线程开发
  • 杂记7--opencv的ar码模块学习
  • [项目设计]高并发内存池
  • 28岁才转行软件测试,目前32了,我的一些经历跟感受
  • Python导入模块的3种方式
  • select 与 where、order by、limit 子句执行优先级比较
  • Linux内核并发与竞争-原子操作
  • Java笔记-泛型的使用
  • 特斯拉无人驾驶解读
  • 生物素-琥珀酰亚胺酯Biotin-NHS;CAS号:35013-72-0;可对溶液中的抗体,蛋白质和任何其他含伯胺的大分子进行简单有效的生物素标记。
  • Maven_第五章 核心概念
  • 【深度学习】人脸识别工程化落地
  • AOP面向切面编程思想。
  • 实验7-变治技术及动态规划初步
  • JVM垃圾回收机制GC理解
  • C++中的容器
  • 2023备战金三银四,Python自动化软件测试面试宝典合集(五)
  • SpringDI自动装配BeanSpring注解配置和Java配置类