四平方和问题(java)
QUESTION:
四平方和的定理又称拉格朗日定理:每个正整数都可以表示至多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
资源约定:
峰值内存消耗(含虚拟机) < 256M CPU消耗 < 3000ms
ANSWER:
1 import java.util.Scanner; 2 public class Main{ 3 public static void main(String[] args){ 4 Scanner sc = new Scanner(System.in); 5 int n = sc.nextInt(); 6 7 if(n>0&&n<=5000000){ 8 for(int i = 0;i<(int)Math.sqrt(n)+1;i++){ 9 for(int j = 0;j<(int)Math.sqrt(n)+1;j++){ 10 for(int k = 0;k<(int)Math.sqrt(n)+1;k++){ 11 for(int h = 0;h<(int)Math.sqrt(n)+1;h++){ 12 if(i*i+j*j+k*k+h*h==n){ 13 System.out.println(i+" "+j+" "+k+" "+h); 14 System.exit(0); 15 } 16 } 17 } 18 } 19 } 20 } 21 22 } 23 }
PS:
遇见题真的是不要怕,一看见题心里就想,完了这道题不会,这不行。
本来会的题,都不会了。
抓住问题的点,难题简单化。