蓝桥杯 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; } } } } }