问题描述
小明最近喜欢搭数字积木。一共有10块积木,每个积木上有一个数字,0~9。
搭积木规则: 每个积木放到其它两个积木的上面,并且一定比下面的两个积木数字小。 最后搭成4层的金字塔形,必须用完所有的积木。
下面是两种合格的搭法:
请你计算这样的搭法一共有多少种? 输入 没有输入 输出 一个整数
思路:
水题,先利用全排列模板生成0-9这十个数的全排列然后再进行判断就行了。
代码:
#include <algorithm>
#include<stdio.h>
using namespace std
;
int num
=0;
void process(int *a
)
{
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])
num
++;
}
int main
()
{
int a
[]={0,1,2,3,4,5,6,7,8,9};
int n
=10;
do
{
process(a
);
}while(next_permutation(a
,a
+n
));
printf("%d",num
);
return 0;
}
答案:768