第七届蓝桥杯 JavaA 搭积木

第七届蓝桥杯 JavaA 搭积木


搭积木

小明最近喜欢搭数字积木,
一共有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
法一: 思路:
给十个位置编号,dfs ```java import java.io.File; import java.io.IOException; import java.util.Scanner;

/**
*

  • @description TODO
  • @author frontier
  • @time 2019年3月14日 下午5:24:25

*/
public class 结果填空3搭积木 {
static Scanner in = new Scanner(System.in);
static int[] a = new int[10];
static boolean[] vis = new boolean[10];
static int count;

public static void main(String[] args) throws IOException {
	Scanner in = new Scanner(new File("src/JavaA/s8/10.txt"));
	a[0] = 0;
	vis[0] = true;
	dfs(1);
	//dfs(0);
	System.out.println(count);
}

static boolean check() {
	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;
}

static void dfs(int n) {
	if (n == 10) {
		if (check())
			count++;
		return;
	}

	for (int i = 0; i < 10; ++i) {
		if (!vis[i]) {
			vis[i] = true;
			a[n] = i;
			dfs(n + 1);
			vis[i] = false;
		}
	}
}

}

<hr>
<font color="green">法二:</font>
思路:<br>
给十个位置编号,dfs

<hr>

猜你喜欢

转载自blog.csdn.net/qq_36477987/article/details/89488931