题目描述
小明被劫持到X赌城,被迫与其他3人玩牌。
一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张。
这时,小明脑子里突然冒出一个问题:
如果不考虑花色,只考虑点数,也不考虑自己得到的牌的先后顺序
自己手里能拿到的初始牌型组合一共有多少种呢?
输出格式
请输出该整数,不要输出任何多余的内容或说明文字。
解题思路:本来是想靠数学方法解题,奈何数学能力有限,最后想到了用递归的方法做。
把题目抽象为对13种点数的牌的选取牌的个数(可选0到4个),直到选满13张牌或者选了13次 (因为每种点数选一次,所以只能选13次及以下,即使选了13次若未满13张牌也不算一种答案,比 如:所有点数的牌都选0个)
代码如下:
#include<iostream>
using namespace std;
long long int ans = 0;
void dfs(int u,int k)//u代表选选牌的个数,k代表选牌的次数
{
if (u == 13)
{
ans++;
}
if (u >= 13 || k >= 13) return;
for (int i = 0; i <= 4; i++)
{
dfs(u+i, k+1);
}
}
int main()
{
dfs(0,0);
cout << ans;
return 0;
}