美文网首页
用程序解决儿子的问题(二):你要几个宝石?

用程序解决儿子的问题(二):你要几个宝石?

作者: redexpress | 来源:发表于2022-02-07 11:08 被阅读0次

之前写了:用程序解决儿子的问题:她们分别买了什么?,这是第二篇

问题

一个国王要奖给大臣宝石,他对大臣说:袋子里有红宝石和绿宝石,红宝石有5个,绿宝石6个,你可以取任意数量的宝石,如果红宝石的数量和绿宝石的数量相同,这些宝石就归你,如果不相同,你就得不到宝石,你要取几个宝石呢?

分析

如果红宝石和绿宝石数量相同,那必须取偶数个,也就是2、4、6、8、10,很容易分析,取2个和10个赢的的概率是6/11,那取4个、6个、8个赢的概率是多少呢?用概率分析就有点难了,不如直接写程序计算。

程序

import random
from functools import reduce


def solve(count, num):
    win = 0
    for i in range(count):
        box = [1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0]
        picked = []
        for j in range(num):
            r = random.randint(0, len(box) - 1)
            ball = box[r]
            box.remove(ball)
            picked.append(ball)
        summary = reduce(lambda x, y: x+y, picked)
        if summary == num // 2:
            win += 1
    return win


def main():
    win = solve(110000, 2)
    print(win)
    win = solve(110000, 4)
    print(win)
    win = solve(110000, 6)
    print(win)
    win = solve(110000, 8)
    print(win)
    win = solve(110000, 10)
    print(win)


if __name__ == '__main__':
    main()

某次输出结果

60087
50041
47533
50171
59995

可以看到取4、6、8个赢的概率都低于取10个概率,显然取10个宝石最赚啦。

相关文章

网友评论

      本文标题:用程序解决儿子的问题(二):你要几个宝石?

      本文链接:https://www.haomeiwen.com/subject/dtcmkrtx.html