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

  • 相关阅读:
    Java实现 蓝桥杯 历届试题 翻硬币
    后台管理UI推荐
    js跳转页面方法(转)
    Request常用方法 (总结)
    Eclipse项目 迁移到 Intellj IDEA
    由后端来类比前端设计的思考(转)
    数据库字段命名及设计规范(转)
    如何改变Myeclipse编辑区背景色(转)
    Myeclipse和windows调节成护眼色
    qt截获html请求(继承QNetworkAccessManager和QNetworkReply)
  • 原文地址:https://www.cnblogs.com/liushuncheng/p/6562437.html
Copyright © 2011-2022 走看看