LQ0051 搭积木枚举
Posted 海岛Blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LQ0051 搭积木枚举相关的知识,希望对你有一定的参考价值。
题目来源:蓝桥杯2016 Java A组F题
题目描述
小明最近喜欢搭数字积木,一共有10块积木,每个积木上有一个数字,0~9。
搭积木规则:每个积木放到其它两个积木的上面,并且一定比下面的两个积木数字小。
最后搭成4层的金字塔形,必须用完所有的积木
下面是两种合格的搭法:
0
1 2
3 4 5
6 7 8 9
0
3 1
7 5 2
9 8 6 4
请你计算这样的搭法一共有多少种?
输出格式
一个整数表示答案
问题分析
求所有的搭法,可以用C++STL的置换函数next_permutation()来得到0-9的全排列,实则是枚举;也可以用循环枚举实现;也可以用DFS实现枚举。
AC的C++语言程序如下:
/* LQ0051 搭积木 */
#include <iostream>
#include <algorithm>
using namespace std;
int a[] = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9;
int main()
int cnt = 0;
do
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])
cnt++;
while (next_permutation(a, a +10));
printf("%d\\n", cnt);
return 0;
以上是关于LQ0051 搭积木枚举的主要内容,如果未能解决你的问题,请参考以下文章