📅  最后修改于: 2023-12-03 14:57:45.335000             🧑  作者: Mango
本谜题是著名的计算机科学家克莱·沃卓斯基提出的,它是一个关于基础概率问题的谜题,涉及到概率、策略和组合数学等多个知识领域。
有一千枚硬币和十个袋子,其中九个袋子装有一百个硬币,另一个袋子装有九十个硬币。现在随机选出一个袋子,然后从袋子中随机取出一枚硬币,发现它是正面朝上。问这枚硬币来自哪个袋子的概率最大,并且最大概率是多少?
首先,很容易想到选择九个袋子中的任意一个袋子的概率是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。