题目描述
一间冰淇淋商店刚刚开张,外面有2×N个人购买1元的冰淇淋,其中一半人拿着1张2元人民币,另一半人拿一张1元人民币。售货员很粗心,没有准备零钱,要使出售过程中不发生找钱困难的问题,这2×N个人应该如何排队?请你帮售货员找出所有方案数量的总和。
输入
一个整数N(N≤15)。
输出
方案总数M。
样例输入
4
样例输出
14
递归内:
如果选完则ans++,否则判断如果还能选(具体见代码)则深一层递归
#include <bits/stdc++.h>
using namespace std;
int n, ans, onen = 0;//onen是剩下的一元纸币个数,也能表示还能选的两元
void dg(int one, int two)
{
if (one == n && two == n)
ans++;
else
{
if (one + 1 <= n)
{
onen++;
dg(one + 1, two);
onen--;
}
if (two + 1 <= n && onen >= 1)
{
onen--;
dg(one, two + 1);
onen++;
}
}
}
main()
{
scanf("%d", &n);
dg(0, 0);
printf("%d", ans);
}
yee~