蓝桥杯算法题——搭积木



搭积木


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


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


下面是两种合格的搭法:


   0
  1 2
 3 4 5
6 7 8 9


   0
  3 1
 7 5 2
9 8 6 4    


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


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


package 搭积木;

public class Main {
	
	static int[] point = new int[10];
	static int count= 0;
	static boolean k[]=new boolean[10];
	
	public static void main(String[] args) {
		f(0);
		System.out.println(count);
	}
	
	static void f(int n) {

		if (n == 10) {
			count++;

			show();
			return;
		}

		for (int i = 0; i < 10; i++) {

			point[n] = i;

			if (check(i, n) && k[i] == false) {

				k[i] = true;
				f(n + 1);
				k[i] = false;
			}
		}
	}
	
	
	static boolean check(int i,int n){
			
		
			
		
		
			if(n==0) return true;
			
			if(n>0&&n<3&&point[0]point[1]) return true;
			if(n==4&&point[n]>point[1]&&point[n]>point[2]) return true;
			if(n==5&&point[n]>point[2]) return true;
			
			
			if(n==6&&point[n]>point[3]) return true;
			if(n==7&&point[n]>point[3]&&point[n]>point[4]) return true;
			if(n==8&&point[n]>point[4]&&point[n]>point[5]) return true;
			if(n==9&&point[n]>point[5]) return true;
			
		
		
		return false;
	}
	
	
	static void show(){
		for (int i = 0; i < point.length; i++) {
			System.out.print(point[i]+" ");
		}
		System.out.println();
	}
}





  

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