2015年第六届蓝桥杯 - 省赛 - C/C++大学A组 - F. 牌型种数
一、题目描述
小明被劫持到X赌城,被迫与其他3人玩牌。
一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张。
这时,小明脑子里突然冒出一个问题:
如果不考虑花色,只考虑点数,也不考虑自己得到的牌的先后顺序,自己手里能拿到的初始牌型组合一共有多少种呢?
二、解题
因为不考虑花色,所以我们只需对每个点数的牌计数而不需要考虑具体的排列。
idx
代表索引,我们要从点数一遍历到点数13;i
代表对应点数拿了多少张牌(可以取0);cnt
是对总牌树的统计,最后等于13才符合题意
三、代码
def dfs(idx, cnt):
if idx > 13 or cnt > 13:
return
if idx == 13 and cnt == 13:
global ans
ans += 1
return
for i in range(5):
dfs(idx + 1, cnt + i)
if __name__ == '__main__':
ans = 0
dfs(0, 0)
print(f"ans = {ans}")