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

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

作者: 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