zoukankan      html  css  js  c++  java
  • 蓝桥杯比赛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

    分析

    因为题目要求4个数从小到大并且取最小的一项输出,所以用四个for循环来表示四个数,并且内层的循环变量起始值=外层变量,来确保有顺序,这样写还有一个好处,当选取出第一个项时,这个结果就是最小的结果项,此时就可以return了。

    第一版代码如下:

    import java.util.Scanner;
    
    public class fifteen {
    
    	public static void main(String[] args){
    		
    		int s;
    		Scanner in=new Scanner(System.in);
    		s=in.nextInt();
    		int a,b,c,d;
    		for(a=0;a<=s;a++)
    			for(b=a;b<=s;b++)
    				for(c=b;c<=s;c++)
    					for(d=c;d<=s;d++)
    					{
    						if(s==(a*a+b*b+c*c+d*d)){
    							System.out.println(a+" "+b+" "+c+" "+d);
    							return;
    						}			
    					}
    	}
    	
    }
    

      

    后面我发现,for循环里的执行条件可以细化,这样可以大大减少执行的次数,从而提高执行时效

    因此将for循环中间条件换成 

    <=Math.sqrt(s)

    第二版代码如下:
    import java.util.Scanner;
    
    public class fifteen {
    
    	public static void main(String[] args){
    		
    		int s;
    		Scanner in=new Scanner(System.in);
    		s=in.nextInt();
    		int a,b,c,d;
    		for(a=0;a<=Math.sqrt(s);a++)
    			for(b=a;b<=Math.sqrt(s);b++)
    				for(c=b;c<=Math.sqrt(s);c++)
    					for(d=c;d<=Math.sqrt(s);d++)
    					{
    						if(s==(a*a+b*b+c*c+d*d)){
    							System.out.println(a+" "+b+" "+c+" "+d);
    							return;
    						}			
    					}
    	}
    	
    }
    

      

    执行结果如下:

    7

    1 1 1 2

  • 相关阅读:
    学习笔记—查找
    水晶报表图表制作问题
    Chrome对最小字体的限制
    Devexpress的ASPxDateEdit控件设置其‘today’ 为客户端当前日期
    水晶报表多表数据源
    System.Web.HttpValueCollection.ThrowIfMaxHttpCollectionKeysExceeded
    利用水晶报表制作甘特图
    水晶报表打印时最后多打印一空白页
    day3学习
    Python高级自动化培训day1
  • 原文地址:https://www.cnblogs.com/liushuncheng/p/6562437.html
Copyright © 2011-2022 走看看