3门问题的简明解释与程序模拟
2021/12/5 11:18:25
本文主要是介绍3门问题的简明解释与程序模拟,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
问题:三扇门,只有一扇门后面有奖品。你随便选择了一扇门。然后主持人打开了另一扇门,里面是空的。他问你"换不换?" 换还是不换的中奖率高?
答案:换的中奖率是2/3,不换的中奖率是1/3。
注意:主持人必定打开空门。他知道哪扇门有奖品。他不会打开你选择的门。
如果选择不换,即忽略主持人,中奖率是1/3。如果选择换,以奖品在0号门后为例:你选0,主持人选1或2,相应地你选2或1,不中奖。你选1,主持人只能选2,你只能选0,中奖。你选2,主持人只能选1,你只能选0,中奖。总结:如果你第一次选的是0,最后不中奖;如果第一次选的是1或2,最后必然换回0,中奖。3选2,中奖概率是2/3。奖品在1号或2号门后的结果一样。把程序里的prize = randint(0, 2)换成prize = 0,1,2中某个固定的数,结果一样。
1 - 不换的中奖率1/3 = 2/3,只是特例。若有10扇门,不换的中奖率是0.1, 换的中奖率不可能是0.9。总共3扇门,主持人选后剩两扇,非此即彼。
一个袋中里有三个球,0,1,2,摸一次拿到1的概率是1/3。如果球的编号换成0,1,0,拿到1的概率还是1/3,不是说摸到的球不是0就是1,所以概率是1/2。
门用0,1,2编号是为了便于程序处理:chosen = (chosen + 1) % 3
# -*- coding: gbk -*- from random import randint def test_randint(): d = {}; cnt = 0 for i in range(10000): i = randint(0, 2); d[i] = 1 + d.get(i, 0) print(d) test_randint() def p(num, den): a = float(cnt) / n; b = float(num) / den print(a, ' = ' if abs(a - b) < 0.01 else ' != ', num, '/', den, sep='') cnt = 0; n = 300000 for i in range(n): prize = randint(0, 2) chosen = randint(0, 2) while True: host = randint(0, 2) if host != prize and host != chosen: break chosen = (chosen + 1) % 3 if chosen == host: chosen = (chosen + 1) % 3 if chosen == prize: cnt += 1 p(2, 3)
这篇关于3门问题的简明解释与程序模拟的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南