蓝桥杯—— 搭积木

搭积木

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

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

下面是两种合格的搭法:

   0
  1 2
 3 4 5
6 7 8 9

   0
  3 1
 7 5 2
9 8 6 4    

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

请填表示总数目的数字。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。

最后结果为:768

public class Main {
    static int sum = 0;
    public static void main(String[] args) {
        int a[] = new int[10];
        boolean v[] = new boolean[10];
        dfs(a, v, 0);
        System.out.println(sum);
    }
    
    private static void dfs(int[] a, boolean[] v, int n) {
        if(n == 10) {
            if(fun(a)) {
                sum++;
            }
            return ;
        }
        
        for(a[n] = 0; a[n] < 10; a[n]++) {
            if(v[a[n]] == false) {
                v[a[n]] = true;
                n = n+1;
                dfs(a, v, n);
                n = n - 1;    //回溯
                v[a[n]] = false;
            }else {
                continue;
            }
        }
    }
 
    private static boolean fun(int[] a) {
        if(a[0] < a[1] && a[0] < a[2] && a[1] < a[3] && a[1] < a[4]
                && a[2] < a[4] && a[2] < a[5] && a[3] < a[6] && a[3] < a[7]
                && a[4] < a[7] && a[4] < a[8] && a[5] < a[8] && a[5] < a[9]) {
            return true;
        }
        return false;
    }
 
}

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×