小明被劫持到X赌城,被迫与其他3人玩牌。
一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张。
这时,小明脑子里突然冒出一个问题:
如果不考虑花色,只考虑点数,也不考虑自己得到的牌的先后顺序,自己手里能拿到的初始牌型组合一共有多少种呢?
#include<iostream>
using namespace std;
int sum = 0;//手牌数
int count1 = 0;//方案数
/*深度优先算法*/
void dfs(int kind)//kind表示当前的点数
{
if (sum > 13 || kind > 13)return;//如果总数大于13直接return
if (kind == 13 && sum == 13)//如果满足要求退出循环
{
count1++;
return;
}
if (kind <= 13)
{
int i;
for (i = 0; i < 5; i++)//取0张或者取4张
{
sum = sum + i;
dfs(kind + 1);
sum = sum - i;
}
}
}
int main()
{
dfs(0);
cout << count1 << endl;
return 0;
}
3598180