1253
小明被劫持到X赌城,*与其他3人玩牌。
一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张。
这时,小明脑子里突然冒出一个问题:
如果不考虑花色,只考虑点数,也不考虑自己得到的牌的先后顺序
自己手里能拿到的初始牌型组合一共有多少种呢?
输出
请输出该整数,不要输出任何多余的内容或说明文字。
注意
- J Q K相当于11、12、13,即是扑克为1-13点数,每种4张
算法
- 首先采用枚举法,分单个点数可能有1,2,3,4张牌分别多少,共有39种分堆
- 利用函数算组合,让后求和
- zh(),是一个求组合C的函数
单个计算便是:zh(a,13)zh(b,13-a)zh(c, 13-a-b)*zh(d, 13-a-b-c)
最后累加求和即可。
题解
from functools import reduce
def zh(u, d):#计算组合
if u == 0:
return 1
if u>d//2:
u = d - u
fenmu = reduce(multiply, [i for i in range(1, u+1)],1)
# print(fenmu)
fenzi = reduce(multiply, [i for i in range(d, d-u,-1)],1)
# print(fenzi)
return fenzi//fenmu
def accumulate(data):
a, b, c, d = data
mul = zh(a,13)*zh(b,13-a)*zh(c, 13-a-b)*zh(d, 13-a-b-c)
return mul
multiply = lambda a, b : a*b
# print(zh(24,25))
# count = 0
array = []
for i in range(14):
for j in range(7):
for k in range(5):
s = 13 - (1*i + 2*j + 3*k)
if s >= 0 and s%4 == 0:
# count = count + 1
array.append([i, j, k, int(s/4)])
# print(len(array))
sum = 0
for i in range(len(array)):
#print(array[i])
sum += accumulate(array[i])
#print()
print(sum)
结果:
print('3598180')
/**************************************************************
Problem: 1253
User: yanshanbei
Language: Python
Result: 正确
Time:21 ms
Memory:26796 kb
****************************************************************/