有A,B,C…共9种不同卡片,每种卡片都有13张,每次取一张,如果是A卡片就拿走,不是就放回,求:取多少次,能让A卡片拿走大于等于3次的概率大于90%?

思路

考虑每一次取牌对当前状态的影响,考虑取牌分别是A和非A对当前状态的影响,构造状态转移函数,计算每一次取牌后各个状态的概率。

参考代码
iteration_id = 0
num = 14
pl = [0 for i in range(num)]
state = [0 for i in range(num)]
state[0] = 1

for i in range(num):
    pl[i] = (13 - i) / (117 - i)

while sum(state[3:]) <= 0.9:
    iteration_id += 1
    for i in range(num - 1, 0, -1):
        state[i] = state[i] * (1 - pl[i]) + state[i - 1] * pl[i - 1]
    state[0] = state[0] * (1 - pl[0])

print("Total need", iteration_id, "cards")
问题来源

https://www.zhihu.com/question/349265793/answer/848276041

Logo

助力广东及东莞地区开发者,代码托管、在线学习与竞赛、技术交流与分享、资源共享、职业发展,成为松山湖开发者首选的工作与学习平台

更多推荐