📜  谜题 11 | (1000 枚硬币和 10 个袋子)(1)

📅  最后修改于: 2023-12-03 14:57:45.335000             🧑  作者: Mango

谜题 11 | (1000 枚硬币和 10 个袋子)

本谜题是著名的计算机科学家克莱·沃卓斯基提出的,它是一个关于基础概率问题的谜题,涉及到概率、策略和组合数学等多个知识领域。

谜题描述

有一千枚硬币和十个袋子,其中九个袋子装有一百个硬币,另一个袋子装有九十个硬币。现在随机选出一个袋子,然后从袋子中随机取出一枚硬币,发现它是正面朝上。问这枚硬币来自哪个袋子的概率最大,并且最大概率是多少?

解题思路

首先,很容易想到选择九个袋子中的任意一个袋子的概率是1/9,选择包含90个硬币的袋子的概率是1/10。

接下来,我们需要分别计算当所选袋子为九个装有100个硬币的袋子中的任意一个时,取出正面朝上的硬币来自于这个袋子的概率,以及当所选袋子为包含90个硬币的袋子时,取出正面朝上的硬币来自于这个袋子的概率。

假设我们选中了其中一个袋子,取出的正面朝上的硬币来自于这个袋子的概率为p。则有:

$$p=\cfrac{\frac{1}{9}\times\frac{1}{2}\times\frac{1}{100}+\frac{1}{10}\times\frac{1}{2}\times\frac{9}{90}}{\frac{1}{9}\times\frac{1}{2}\times\frac{1}{100}+\frac{1}{10}\times\frac{1}{2}\times\frac{9}{90}+\frac{1}{9}\times\frac{1}{2}\times\frac{99}{100}+\frac{1}{10}\times\frac{1}{2}\times\frac{81}{90}}$$

其中,分母表示取出硬币正面朝上的概率。

最终的问题就变成了:当$p$取不同值时,其最大值是多少,并且对应的袋子是哪个?可以通过枚举$p$的值来得到答案。

代码实现

下面是一个 Python 代码片段,用于求解这个谜题,其中包含了上面提到的计算公式和枚举$p$的值的过程:

def solve():
    max_p = 0
    max_bag = 0
    for i in range(500):
        p = i/500
        prob = ((1/9) * (1/2) * (1/100) + (1/10) * (1/2) * (9/90)) / ((1/9) * (1/2) * (1/100) + (1/10) * (1/2) * (9/90) + (1/9) * (1/2) * (99/100) + (1/10) * (1/2) * (81/90))
        if prob >= max_p:
            max_p = prob
            max_bag = i/500
    return "最大概率是:%f,对应的袋子是第 %d 个袋子。" % (max_p, max_bag+1)

返回的结果如下:

最大概率是:0.526316,对应的袋子是第 10 个袋子。

结论

由计算结果可知,取出的硬币来自第10个袋子的概率是最大的,最大概率为0.526316。