蓝桥杯 2016年 第七届 四平方和(JAVA)

蓝桥杯 2016年 第七届 四平方和(JAVA)

  • 小技巧

    判断一个double类型的值a是否为整数,可以使用如下方法

    if((a%1)<Double.MIN_VALUE){ //... }
    
  • 基础暴力解法

    package provincial_2016B;
    
    import java.util.Scanner;
    
    public class Eight {
    	public static void main(String[] args) {
    		Scanner scan = new Scanner(System.in);
    		int n=scan.nextInt();
    		for(int i=0;i*i<=n;i++){
    			for(int j=i;i*i+j*j<=n;j++){
    				for(int k=j;i*i+j*j+k*k<=n;k++){
    					int temp=n-i*i-j*j-k*k;
    					double l=Math.sqrt(temp);
    					if(l%1<Double.MIN_VALUE){
    						System.out.println(i+" "+j+" "+k+" "+(int)l);
    						return;
    					}
    				}
    			}
    		}
    	}
    }
    
    
  • 在此基础上进行优化

    package provincial_2016B;
    
    import java.util.HashMap;
    import java.util.Scanner;
    
    public class Eight {
    	private static HashMap<Integer, Integer> hm = new HashMap<Integer, Integer>();
    	
    	public static void main(String[] args) {
    		Scanner scan = new Scanner(System.in);
    		int n=scan.nextInt();
    		for(int c=0;c*c<=n;c++){
    			for(int d=c;c*c+d*d<=n;d++){
    				hm.put(c*c+d*d, c);
    			}
    		}
    		for(int a=0;a*a<=n;a++){
    			for(int b=a;a*a+b*b<=n;b++){
    				int temp=n-a*a-b*b;
    				if(hm.containsKey(temp)){
    					int c=hm.get(temp);
    					int d=(int)Math.sqrt(temp-c*c);
    					System.out.println(a+" "+b+" "+c+" "+d);
    					return;
    				}
    			}
    		}
    	}
    }
    
    
原文地址:https://www.cnblogs.com/fromneptune/p/12488706.html