四平方和 【暴力但是剪枝】

暴力但是剪枝+注意组合数

因为是组合情况,所以从下一层的for应要从上一层的起始开始。

    public static void fourpingfang() {
    	Scanner sc = new Scanner(System.in);
    	int N = sc.nextInt();
    	sc.close();
    	int n = (int) Math.sqrt(N); //注意数据范围,每个数值一定会小于N的开根号。
    	for(int i=0;i<=n;i++) {
    		for(int j=i;j<=n;j++) { //注意 从i开始
    			for(int k=j;k<=n;k++) {
    				for(int m=k;m<=n;m++) {
    					int cur = i*i+j*j+k*k+m*m;
    					if(cur>N) break; //剪枝,不然过不了
    					if(cur==N) {
    						System.out.println(i+" "+j+" "+k+" "+m);
    						return ;
    					}
    				}
    			}
    		}
    	}
    }

你可能感兴趣的:(蓝桥杯)