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 搭积木枚举的主要内容,如果未能解决你的问题,请参考以下文章

搭积木(java)-蓝桥杯

[Luogu 2816]宋荣子搭积木

codevs 1255 搭积木 x

搭积木 并查集

3249 搭积木

搭积木(block)