问题描述
小明最近喜欢搭数字积木。一共有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