牌型种数
小明被劫持到X赌城,被迫与其他3人玩牌。
一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张。
这时,小明脑子里突然冒出一个问题:
如果不考虑花色,只考虑点数,也不考虑自己得到的牌的先后顺序,自己手里能拿到的初始牌型组合一共有多少种呢?
请填写该整数,不要填写任何多余的内容或说明文字。
答案:3598180
13种牌型每一个有0,1,2,3,4 这5种
方法一:
枚举,逐个排查
#include<iostream>
using namespace std;
int main()
{
int count = 0;
int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13;
for (a1 = 0;a1 < 5;a1++)
for (a2 = 0;a2 < 5;a2++)
for (a3 = 0;a3 < 5;a3++)
for (a4 = 0;a4 < 5;a4++)
for (a5 = 0;a5 < 5;a5++)
for (a6 = 0;a6 < 5;a6++)
for (a7 = 0;a7 < 5;a7++)
for (a8 = 0;a8 < 5;a8++)
for (a9 = 0;a9 < 5;a9++)
for (a10 = 0;a10 < 5;a10++)
for (a11 = 0;a11 < 5;a11++)
for (a12 = 0;a12 < 5;a12++)
for (a13 = 0;a13 < 5;a13++)
if (a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8 + a9 + a10 + a11 + a12 + a13 == 13)count++;
cout << count << endl;
return 0;
}
方法二:
#include<iostream>
using namespace std;
int count= 0;//表示种数;
int sum = 0;//表示手里的牌数;
void pai(int n)
{
if (sum > 13)//说明手里牌数已够;
return;
if (n == 14)//说明13种牌全部都排查过;
{
if (sum == 13)
count++;
return;
}
else
{
for (int i = 0;i <= 4;i++)
{
sum += i;
pai(n + 1);//搜索下一个;
sum -= i;//消除此次加的牌数;
}
}
}
int main()
{
pai(1);//从第一种开始排查;
cout << count<< endl;
return 0;
}