搭积木(蓝桥杯第七届省赛第3题)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

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

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

思路

在这里插入图片描述

1.用递归求出0-9的全排列
2.对每个排列进行判断,满足条件+1

代码

public class Main3 {

	static int count;
	public static void main(String[] args) {
		int[] arr = {0,1,2,3,4,5,6,7,8,9};
		quan(arr,0);
		System.out.println(count);
		
	}
	//求0-9全排列
	public static void quan(int[] arr,int k) {
		if(k==arr.length-1) {
			test(arr);
			return ;
		}
		
		for(int i=k;i<arr.length;i++) {
			int tmp = arr[i];
			arr[i] = arr[k];
			arr[k] = tmp;
			quan(arr,k+1);
			tmp = arr[i];
			arr[i] = arr[k];
			arr[k] = tmp;
		}
	}
	//检验是否满足条件
	public static void test(int[] a) {
		if(a[1]<a[0]) return;
		if(a[2]<a[0]) return;
		if(a[3]<a[1]) return;
		if(a[4]<a[1]) return;
		if(a[4]<a[2]) return;
		if(a[5]<a[2]) return;
		if(a[6]<a[3]) return;
		if(a[7]<a[3]) return;
		if(a[7]<a[4]) return;
		if(a[8]<a[4]) return;
		if(a[8]<a[5]) return;
		if(a[9]<a[5]) return;
		count++;
	}

}

运行结果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/zjfahs/article/details/88167310