精华内容
下载资源
问答
  • Java四平方和

    2020-06-19 19:08:04
    i 接下来代码演示 【代码演示】 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sr = new Scanner(System.in); int n = sr.nextInt(); // 将n开平方,只要每个...

    【题目】
    四平方和定理,又称为拉格朗日定理:
    每个正整数都可以表示为至多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
    【分析】
    本题只需要四个循环就可以搞定,但是他的N<5000000,这样大的数字用四个循环嵌套循环次数太多,需要等待很长时间,所以需要两步优化
    1.使每一个循环的最大值减少,因为是平方和,所以每个循环的最大值是N的开方就可以
    2.从第二个循环开始,去掉每一个循环和上层循环一样的数值平方,具体是(i=0;i<n;i++)(j=i;j<n;j++)
    接下来代码演示
    【代码演示】

    import java.util.Scanner;
    
    public class Main {
        public static void main(String[] args) {
            Scanner sr = new Scanner(System.in);
            int n = sr.nextInt();
            // 将n开平方,只要每个循环不超过max就行了
            double max = Math.sqrt(n);
            for (int a = 0; a < max; a++) {
                for (int b = a; b < max; b++) {
                    for (int c = b; c < max; c++) {
                        for (int d = c; d < max; d++) {
                            if (a * a + b * b + c * c + d * d == n) {
                                System.out.println(a + " " + b + " " + c + " " + d);
                                return;
                            }
                        }
                    }
                }
            }
        }
    }
    展开全文
  • 蓝桥杯 java 四平方和

    2017-03-28 19:14:16
    import java.lang.reflect.Array; import java.util.ArrayList; import java.util.Arrays; import java.util.Scanner; import java.util.Vector; public class Main { public static void main(String[] args) { ...


    四平方和


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




    请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。


    所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
    注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。

    注意:主类的名字必须是:Main,否则按无效代码处理。


    
    import java.lang.reflect.Array;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Scanner;
    import java.util.Vector;
    public class Main {
    	public static void main(String[] args)
    	{
    		trans();
    		
    	}
    
    	private static void trans() {
    		// TODO Auto-generated method stub
    		Scanner in=new Scanner(System.in);
    		long n=in.nextLong();
    		double k1=Math.sqrt(n);
    		long sum=0;
    		int k=(int)k1;
    		for(int i=0;i<=k;i++){
    			sum=i*i;
    			if(sum>n)continue;
    			for(int a=i;a<=k;a++){
    				if(sum+a*a>n)continue;
    				sum+=a*a;
    				for(int b=a;b<=k;b++){
    					if(sum+b*b>n)continue;
    					sum+=b*b;
    					for(int c=b;c<=k;c++){
    						if(sum+c*c==n){
    							System.out.println(i+" "+a+" "+b+" "+c);
    							return ;
    						}
    						
    					}
    					sum-=b*b;
    				}
    				sum-=a*a;
    			}
    		}
    	}
    }
    


    展开全文
  • public class 四平方和 { private static void f1(int n) { // long tmp = (long) Math.sqrt(n); for (int a = 0; a * a ; a++) { for (int b = a; b * b + a * a ; b++) { for (int c = b; c * c + b...

    四平方和

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


    请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。

    所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
    注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。
    注意:主类的名字必须是:Main,否则按无效代码处理。



    解析:

           此题可以用暴力破解,但是必须得优化一下,否则会超时。第一个优化的地方就是a、b、c、d的取值,b的初始值应该等于a,c的初始值应该等于b,d初始值应该等于c,这样可以避免许多重复的种类出现;第二个优化的地方就是除去最后一个for循环,d值等于(n-a*a-b*b-c*c)开平方,然后再判断d是否是整数即可,我这里是直接判断四个数的平方和相加是否等于n,道理是一样的。以下保证了第一条数据就是联合主键最小的那位。

    源代码如下:

    import java.util.Scanner;
    
    public class 四平方和 {
    
    	private static void f1(int n) {
    		//		long tmp = (long) Math.sqrt(n);
    		for (int a = 0; a * a <= n; a++) {
    			for (int b = a; b * b + a * a <= n; b++) {
    				for (int c = b; c * c + b * b + a * a <= n; c++) {
    
    					int d = (int) Math.sqrt(n - (c * c + b * b + a * a));
    
    					if (c * c + b * b + a * a + d * d == n) {
    						System.out.println(a + " " + " " + b + " " + c + " " + d);
    						return;
    					}
    				}
    			}
    
    		}
    
    	}
    
    	public static void main(String[] args) {
    		Scanner input = new Scanner(System.in);
    		while (input.hasNext()) {
    			int n = input.nextInt();
    			f1(n);
    		}
    
    	}
    
    }
    吐舌头



    展开全文
  • java . util . Scanner ; /** * 四平方和 * @author 小章与阿曦 * */ public class Main { public static int count = 0 ; //计数变量表示第几个数的下标 public static int [ ] ...

    第七届蓝桥杯 (javaB组)四平方和

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

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

    解题思路

    本题的重点在于如何找出这四个整数,因为只有找出这四个整数才能判断这四个数能否满足题目的要求,找出这四个数可以转化为排列组合的问题。即从n个数中找出4个数的全排,注意这个全排是有条件限制的,条件就是题目所说的

    要求你对4个数排序:
    0 <= a <= b <= c <= d
    并对所有的可能表示法按 a,b,c,d 为联合主键升序排列,最后输出第一个表示法

    我们首先要定义一个计数变量对用n个数中已经找出的数进行计数,然后定义一个数组进行存储

    	public static int count = 0;//计数变量表示第几个数的下标
    	public static int[] a = new int[4];//使用数组来存储取出的4个数
    

    这四个数必须是从小到大进行排列,可以相等但是前面的数永远不大于后面的数。
    所以我们的判断条件必须要考虑到这一点,

    	public static boolean check(int count) {
    		//遍历数组
    		for (int i = 0; i < count; i++) {
    			//限制数组的应该是从小到大进行排列
    			if (a[i]>a[count]) {
    				return false;
    			}
    		}
    		return true;
    	}
    

    当我们取出四个数后接下来的一步就是进行判断这四个的平方和是否满足题意

    四平方和定理,又称为拉格朗日定理:
    每个正整数都可以表示为至多4个正整数的平方和。
    如果把0包括进去,就正好可以表示为4个数的平方和。

    判断的代码如下

    if ((int)Math.pow(a[0], 2) + (int)Math.pow(a[1], 2) + (int)Math.pow(a[2], 2) + (int)Math.pow(a[3], 2) == n) {
    				//如果满足题意则输出这四个数
    				for (int k : a) {
    					System.out.print(k + " ");
    				}
    				//题目要求只输出第一组数据,则输出后需要退出程序
    				System.exit(1);
    		      }
    

    这里面有一个需要注意的地方就是题目要求只输出第一个表示法

    并对所有的可能表示法按 a,b,c,d 为联合主键升序排列,最后输出第一个表示法

    所以当我们找到第一个满足目条件的4个数并输出后,下一步应该终止该程序避免程序继续运行并输出下一个结果。

    解题完整代码如下:

    import java.util.Scanner;
    /**
     * 四平方和
     * @author 小章与阿曦
     *
     */
    public class Main {
    	public static int count = 0;//计数变量表示第几个数的下标
    	public static int[] a = new int[4];//使用数组来存储取出的4个数
    	public static void main(String[] args) {
    		Scanner scanner = new Scanner(System.in);
    		int n = scanner.nextInt();
    		backTrack(count, n);
    	}
    	
    	public static void backTrack(int count ,int n) {
    		if (count == 4) {
    			//判断是否满足题目4个数平方是否等于输入的正整数n
    			if ((int)Math.pow(a[0], 2) + (int)Math.pow(a[1], 2) + (int)Math.pow(a[2], 2) + (int)Math.pow(a[3], 2) == n) {
    				//如果满足题意则输出这四个数
    				for (int k : a) {
    					System.out.print(k + " ");
    				}
    				//题目要求只输出第一组数据,则输出后需要退出程序
    				System.exit(1);
    			}
    			return;
    		}else {
    			for (int i = 0; i < 3000; i++) {
    				a[count] = i;
    				if (check(count)) {
    					backTrack(count+1, n);
    				}
    			}
    		}
    	}
    	
    	public static boolean check(int count) {
    		for (int i = 0; i < count; i++) {
    			//限制数组的应该是从小到大进行排列
    			if (a[i]>a[count]) {
    				return false;
    			}
    		}
    		return true;
    	}
    	
    }
    

    以上纯属本人的理解,如有错误或者不妥地方欢迎大佬提意见。我会虚心接受并改正的!!!
    2019.11.13 来自小白程序员 小章与阿曦的第一篇博客。

    展开全文
  • 转载请注明出处:http://www.cnblogs.com/zhishoumuguinian/p/8372337.html四平方和定理,又称为拉格朗日定理:每个正整数都可以表示为至多4个正整数的平方和。如果把0包括进去,就正好可以表示为4个数的平方和。...
  • import java.util.Scanner; public class jiu {  public static void main(String[] args) {  Scanner sc=new Scanner(System.in);  int n=sc.nextInt(); //四个循环代表每一个平方和  for (int i = 0...
  • JAVA语言 C组题解_题9 四平方和题目解题思路 题目 四平方和 四平方和定理,又称为拉格朗日定理: 每个正整数都可以表示为至多4个正整数的平方和。 如果把0包括进去,就正好可以表示为4个数的平方和。 比如: 5 = 0^2...
  • import java.util.Scanner; public class Main {  public static void main(String[] args) {  Scanner sc = new Scanner(System.in);  int sr = sc.nextInt();  int flag=0;  int sq = (int) Math....
  • java 蓝桥杯 四平方和

    2018-03-16 16:48:02
    四平方和定理,又称为拉格朗日定理: 每个正整数都可以表示为至多4个正整数的平方和。 如果把0包括进去,就正好可以表示为4个数的平方和。 比如: 5 = 0^2 + 0^2 + 1^2 + 2^2 7 = 1^2 + 1^2 + 1^2 + 2^2 ...
  • 四平方和Java_B

    2021-04-06 16:20:17
    四平方和 题目描述 思路 题目描述 四平方和 四平方和定理,又称为拉格朗日定理: 每个正整数都可以表示为至多4个正整数的平方和。 如果把0包括进去,就正好可以表示为4个数的平方和。 比如: 5 = 0^2 + 0^2 + 1^2 + ...
  • 蓝桥杯 四平方和

    2020-04-20 16:07:55
    蓝桥杯 2016 四平方和 四的平方和 四平方和定理4,又称为拉格朗日定理 每个正整数都可以表示为至少4个正整数的平方和 如果把0包括进去,就正好可以表示为4个数的平方和 比如: 5=0^2+0^2+1^2+2^2; 7=1^2+1^2+1^2+2^2...
  • #acwing四平方和

    2020-07-29 22:01:06
    acwing四平方和 题目 四平方和定理,又称为拉格朗日定理: 每个正整数都可以表示为至多 4 个正整数的平方和。 如果把 0 包括进去,就正好可以表示为 4 个数的平方和。 比如: 5=02+02+12+22 7=12+12+12+22 对于一个...
  • import java.util.Scanner; public class Seven { public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner(System.in); int scI = sc.nextInt(); ...
  • 蓝桥七届 四平方和 JAVA

    千次阅读 2020-03-31 20:21:49
    0 0 1 2 再例如,输入: 12 则程序应该输出: 0 2 2 2 再例如,输入: 773535 则程序应该输出: 1 1 267 838 思路:四重暴力,sqrt是平方和,额 就这样… import java.util.Scanner; public class Main { public ...
  • import java.util.Arrays; public class Text15 { public static void main(String[] args) { int num=773535; for(int i=0;i(int)(Math.sqrt(num));i++){ for(int j=i;j(int)(Math.sqrt(num));j++){ ...
  • 四平方和 蓝桥杯

    2019-03-16 21:07:00
    java.util.Scanner; public class Main{ static int N; public static void main(String[] args){ Scanner reader = new Scanner(System.in); N = reader.nextInt(); for ( int a=0;a(N...
  • 【蓝桥杯2016JavaB】四平方和

    万次阅读 2021-04-04 18:58:43
    public class A08_四平方和 { static int N; static Map, Integer> cache = new HashMap, Integer>(); public static void main(String[] args) { Scanner sc = new Scanner(System.in); N = sc.nextInt(); ...
  • 题目描述 四平方和 代码实现 package com.atguigu.TEST; import java.util.Scanner; class Main{ public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N=0; if (sc.hasNext()){ N=...
  • 7-8 四平方和Java

    2019-03-19 17:41:22
    public class _08四平方和 { static int N; static Map,Integer> cache=new HashMap,Integer>(); public static void main(String[] args) { Scanner sc = new Scanner(System.in); N = sc.nextInt(); for ...
  • public class 四平方和 { public static void main(String[] args) { // TODO Auto-generated method stub Scanner ci=new Scanner(System.in); int N=ci.nextInt(); for(int a=0;a(N);a++) for(int b=0;b...
  • 四平方和(枚举)

    2018-02-02 21:38:21
    1.问题描述: 四平方和 四平方和定理,又称为拉格朗日定理: 每个正整数都可以表示为至多4个正整数的平方和。 如果把0包括进去,就正好可以表示为4个数的平方和。 比如: 5 = 0^2 + 0^2 + 1^2 + 2^2 ...
  • 0 0 1 2 再例如,输入: 12 则程序应该输出: 0 2 2 2 再例如,输入: 773535 则程序应该输出: 1 1 267 838 资源约定: 峰值内存消耗(含虚拟机) 消耗 < 3000msimport java.util.HashMap; import java.util.Map; ...
  • 蓝桥杯-四平方和-java

    2021-02-27 18:45:09
    0 0 1 2 再例如,输入: 12 则程序应该输出: 0 2 2 2 再例如,输入: 773535 则程序应该输出: 1 1 267 838 * 程序头部的注释结束 */ 上代码: import java.util.Scanner; public class Main { public static void...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 199
精华内容 79
关键字:

java四平方和

java 订阅