zoukankan      html  css  js  c++  java
  • 搭积木

    小明最近喜欢搭数字积木,
    一共有10块积木,每个积木上有一个数字,0~9。

    搭积木规则:
    每个积木放到其它两个积木的上面,并且一定比下面的两个积木数字小。
    最后搭成4层的金字塔形,必须用完所有的积木。

    下面是两种合格的搭法:

    0
    1 2
    3 4 5
    6 7 8 9

    0
    3 1
    7 5 2
    9 8 6 4

    请你计算这样的搭法一共有多少种?

    static int num = 0;
    	 public static void main(String[] args) {
    	        String str[] = {"1","2", "3", "4", "5", "6", "7", "8","9" };
    	        permutation(str, 0, str.length);
    	        System.out.println(num);
    	    }
    
    	    static void swap(String[] str, int start, int end) {
    	        String tmep = str[start];
    	        str[start] = str[end];
    	        str[end] = tmep;
    	    }
    
    	    static void permutation(String[] str, int start, int end) {
    	    	
    	        if (start == end - 1) {
    	            int a[][];
    	    		a = new int[4][];
    	    		a[0] = new int[1];
    	    		a[1] = new int[2];
    	    		a[2] = new int[3];
    	    		a[3] = new int[4];
    	            a[0][0] = 0;
    	    		a[1][0] = Integer.parseInt(str[0]);a[1][1] = Integer.parseInt(str[1]);
    	    		a[2][0] = Integer.parseInt(str[2]);a[2][1] = Integer.parseInt(str[3]);a[2][2] = Integer.parseInt(str[4]);
    	    		a[3][0] = Integer.parseInt(str[5]);a[3][1] = Integer.parseInt(str[6]);a[3][2] = Integer.parseInt(str[7]);a[3][3] = Integer.parseInt(str[8]);
    	            
    	    		if(isshu(a)){
    	            	num++;
    	            }
    	        } else {
    
    	            for (int i = start; i < end; i++) {
    	                if (i == 0 && str[0].equals("0"))
    	                    continue;
    	                swap(str, start, i);
    	                permutation(str, start + 1, end);
    	                swap(str, start, i);
    	            }
    	        }
    	    }
    	    
    	    static boolean isshu(int a[][]){
    			boolean b = false;
    			if(a[0][0]<a[1][0]&&a[0][0]<a[1][1]/*a[0][0]*/  &&a[1][0]<a[2][0]&&a[1][0]<a[2][1]/*a[1][0]*/ &&a[1][1]<a[2][1]&&a[1][1]<a[2][2]/*a[1][1]*/ &&a[2][0]<a[3][0]&&a[2][0]<a[3][1]/*a[2][0]*/  &&a[2][1]<a[3][1]&&a[2][1]<a[3][2]/*a[2][1]*/ &&a[2][2]<a[3][2]&&a[2][2]<a[3][3]/*a[2][2]*/){
    				b = true;
    			}
    			return b;
    		}
    

      截图:

    768

  • 相关阅读:
    为什么Redis比Memcached易
    请注意CSDN社区微通道,许多其他的精彩等着你
    采用ACE登录设施(一)HelloWorld
    AIX 7.1 install python
    spring mvc入门
    iOS开展——全球应对MotionEvent
    2015第35周日
    2015第35周六转相见恨晚的知识列表
    2015第35周五JavaScript变量
    2015第35周四
  • 原文地址:https://www.cnblogs.com/shouhutian/p/8059778.html
Copyright © 2011-2022 走看看