经典“羊车门”概率问题解答

羊车门问题出自美国《parade》杂志中一个叫作“ask marilyn”的专栏,问题表述如下:

台上有三个门,参赛者需要在三扇门中选择一扇门打开。其中一扇的后面是一辆汽车,选中后面有车的那扇门就可以赢得该汽车,而另外两扇门后面则各藏有一只山羊。当参赛者选定了一扇门,但未去开启它的时候,主持人会开启剩下两扇门中的一扇,露出其中一只山羊(主持人提前知道哪扇门后是山羊,且一定打开后面是山羊的门)。这时,他给参赛者可以重选的机会,也就是可以换选剩下的另一扇门。

那么,关于换不换的问题,有人认为应该换,有人认为不应该换,也有人认为换不换都一样。此问题在当时引起了很大的争议,时至今日也存在着许多不同的看法。

我个人认为应该选择换,选择换门最终能赢得汽车的概率更大一些。

三扇门,两羊一车,从表面上看,在得知第三扇门(假设主持人打开的是第三扇门)后是羊的情况下,1号门与2号门后,有一扇门后是车,一扇门后是羊,选择1号门或2号门,无论换与不换,赢得汽车的可能性是相同的,因为每扇门后面非羊即车,实则不然。

在打开第三扇门是羊的前提下,剩下的两扇门中一羊一车,如果参赛者在第一轮中选择的是后面是羊的门,那么换门后它会看到汽车,如果参赛者在第一轮中选择的是后面是汽车的门,那么换门后它会看到羊。

从概率角度分析,在不换门情况下,赢得汽车的情况是参赛者在第一轮就选到后面是汽车的门,第一轮选到汽车是三选一,概率为1/3。在换门的情况下,赢得汽车的情况是参赛者在第一轮选到的是后面是羊的门,这样才能在第二轮中换门来选到后面是汽车的门,第一轮选到羊是三选二,概率为2/3。

如果是三扇门两羊一车理解起来比较困难的话,可以更改游戏规则,反复体会其中道理。现有100扇门,其中99扇门后面是羊,1扇门后面是汽车。参赛者在第一轮选择完毕后,主持人会打开98扇后面是羊的门,剩下两扇门,问参赛者要不要更换选择。

参赛者肯定希望最终能够打开后面是汽车的门,如果选择不换门,那么意味着参赛者认定自己第一轮选的这扇门后面是汽车,第一轮有100扇门可以选择,因此他在第一轮选到汽车的概率是1/100。如果选择换门,那么意味着参赛者第一轮选的这扇门后面只要是羊就可以,这样才能在换门后选到汽车,而他在第一轮选到羊的概率是99/100。因此换门能赢得汽车的概率更大。

更改规则后的游戏,其中的原理与原问题一致,只不过增大了换门与不换门赢得汽车之间概率的差值,个人觉得更容易理解问题。

参考代码如下:

public static void main(String[] args) {String[] door = new String[100]; // 新建一个数组,其中每个元素代表1扇门// 初始化100扇门后是羊for (int i = 0; i < door.length; i++) {door[i] = "羊";}Random r = new Random();int number = r.nextInt(100); // 生成一个0-99之间的随机数numberdoor[number] = "车"; // 给随机生成的第number个索引位置赋值为汽车,意为将汽车放到第(number + 1)扇门后面// 此时已完成99扇门后是羊,随机1扇门后是汽车// 接收用户数据,第一轮选择第几扇门Scanner sc = new Scanner(System.in);System.out.println("请选择1-100中的第几道门:");int choose = sc.nextInt();System.out.print("第");int line = 0; // 定义变量line,展示数据时换行用if (door[choose - 1] == "车") { // 如果第一次选择的门后面是车,则在剩下99扇后面是羊的门中输出随机的98扇int random = r.nextInt(100); // 随机生成不输出的1扇门// 若随机生成的门恰好是第一次选择的门,则重新生成while (random == choose - 1) {random = r.nextInt(100);}// 在剩下99扇后面是羊的门中输出随机的98扇for (int i = 0; i < door.length; i++) {// 如果是刚刚随机生成的1扇门或后面是汽车的门,则跳过,不输出if (i == random | i == (choose - 1)) {continue;}System.out.println((i + 1) + "、");// 每40条数据换行if (line % 40 == 0) {System.out.println();}}} else { // 如果第一次选择的门后面是羊,则输出剩下的后面是羊的98扇门// 打开98扇后面是羊的门,剩下2扇门未打开(参赛者第一轮选择的门和后面是汽车的门)for (int i = 0; i < door.length; i++) {String sheetDoor = door[i]; // 遍历每扇门,查看门后是什么// 输出除第一轮选择的门之外的后面是羊的98扇门if (sheetDoor == "羊" & (i + 1) != choose) {System.out.print((i + 1) + "、");line++;}// 每40条数据换行if (line % 40 == 0) {System.out.println();}}}System.out.println("道门后面是羊");System.out.println("请选择要不要换门,1换,2不换");// 接收用户数据,第二轮的选择int choose2 = sc.nextInt();// 若选择不换,则输出该扇门后的东西,并给出相应提示if (choose2 == 2) {System.out.println("你选择不换,第" + choose + "道门后是" + door[(choose - 1)]);if (door[(choose - 1)] == "车") {System.out.println("恭喜你,选中了车");} else {System.out.println("很遗憾,你选中了羊");}} else { // 否则说明换,输出该扇门后的东西,并给出相应提示System.out.println("你选择换,第" + choose + "道门后是" + door[(choose - 1)]);if (door[(choose - 1)] == "羊") {System.out.println("恭喜你,选中了车");} else {System.out.println("很遗憾,你选中了羊");}}// 输出第几扇门后面是车,验证结果正确性for (int i = 0; i < door.length; i++) {// 如果第i+1扇门后是车,则输出结果并结束循环,否则继续遍历if (door[i] == "车") {System.out.println("第" + (i + 1) + "道门后是车");break;}}
}

选择不换门,基本上不会赢得汽车(1/100)。

注:并不是说换门的情况下,一定能赢得汽车,只是讲在不知道其他条件的情况下,换门的情况有较大几率赢得汽车。

参考资料

[1] Antineutrino 蒙提霍尔悖论(三门问题)终极分析 [J/OL] 蒙提霍尔悖论(三门问题)终极分析 - Antineutrino - 博客园

[2] 田晨景 胡雄等.再谈“羊车门”问题 [J] .教育教学论坛, 2016,(42)

Java经典“羊车门”概率问题解答相关推荐

  1. 用python解决经典羊车门问题

    羊车门问题 羊车门问题描述:有3扇关闭的门,一扇门后停着汽车,另外两扇门后是山羊,主持人知道每扇门后是什么.参赛者首先选择一扇门.在开启它之前,主持人会从另外两扇门中打开一扇门,露出门后的山羊.此时, ...

  2. python羊车门问题_「羊车门」经典概率题中不换门选中车的概率是多少?

    今天用Python求解「羊车门」经典的概率问题,对概率学基础和Python语法的灵活运用有所收货. 本次「羊车门」求解过程采用的是:穷举法计算概率已验证概率学基础理论.期间重点借鉴了'奥卡姆剃刀的博客 ...

  3. JAVA经典算法50题(转)

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/51097928 JAVA经典算法50题 [程序1]   题目:古典问题:有一对兔子, ...

  4. python羊车门问题_羊车门问题的python模拟和解释

    一.问题描述 羊车门问题描述:有3扇关闭的门,一扇门后停着汽车,另外两扇门后是山羊,主持人知道每扇门后是什么.参赛者首先选择一扇门.在开启它之前,主持人会从另外两扇门中打开一扇门,露出门后的山羊.此时 ...

  5. 羊车门问题python_python编程羊车门问题代码示例

    问题: 有3扇关闭的门,一扇门后面停着汽车,其余门后是山羊,只有主持人知道每扇门后面是什么.参赛者可以选择一扇门,在开启它之前,主持人会开启另外一扇门,露出门后的山羊,然后允许参赛者更换自己的选择. ...

  6. python羊车门问题_羊车门问题简析

    羊车门问题 有3扇关闭的门,一扇门后面停着汽车,其余门后是山羊,只有主持人知道每扇门后面是什么.参赛者可以选择一扇门,在开启它之前,主持人会开启另外一扇门,露出门后的山羊,然后允许参赛者更换自己的选择 ...

  7. 羊车门问题python程序_羊车门问题

    羊车门问题 有3扇关闭的门,一扇门后停着汽车,另外两扇门后是山羊,主持人知道每扇门后是什么.参赛者首先选择一扇门.在开启它之前,主持人会从另外两扇门中打开一扇门,露出门后的山羊.此时,允许参赛者更换自 ...

  8. python画羊_python编程羊车门问题代码示例

    问题: 有3扇关闭的门,一扇门后面停着汽车,其余门后是山羊,只有主持人知道每扇门后面是什么.参赛者可以选择一扇门,在开启它之前,主持人会开启另外一扇门,露出门后的山羊,然后允许参赛者更换自己的选择. ...

  9. python羊车门问题_python羊车门问题的正确解答

    羊车门问题 羊车门问题描述:有3扇关闭的门,一扇门后停着汽车,另外两扇门后是山羊,主持人知道每扇门后是什么.参赛者首先选择一扇门.在开启它之前,主持人会从另外两扇门中打开一扇门,露出门后的山羊.此时, ...

最新文章

  1. 让CNN有了平移不变性,同时提升ImageNet成绩:Adobe开源新方法,登上ICML
  2. 使用tomcat软件在本地搭建服务器
  3. 文本显示变量_Axure9实操教程10-变量
  4. java proxy
  5. JavaFX UI控件教程(十六)之Separator
  6. Linux无线网卡的工作模式
  7. 【BZOJ3669】【codevs3314】魔法森林,写作LCT,读作SPFA
  8. 北京林业大学计算机复试难度,2015年北京林业大学考研复试经验
  9. userdel: user xxx is currently used by process xxx
  10. svchost.exe 上传下载占用大量资源
  11. 2022非常全的接口测试面试题及参考答案-软件测试工程师没有碰到算我输~
  12. 自动化改造要想取得最大效益,要搞清这几个问题!
  13. 进口计算机软件,关于软件进口报关手续及流程介绍【进口知识】
  14. AI创业有风险,起步需谨慎!创业者从准备到失败~
  15. WebRTC回声抵消模块简要分析
  16. 使用Angular的网站
  17. 2020.10.18 第八课
  18. [Ubuntu] 可用云盘-尝试记录
  19. ogre 开发范例大全(2)
  20. 查看电脑的外网IP地址

热门文章

  1. 联想y7000p怎么开启高性能模式?
  2. 笔记本高分辨软件兼容问题,字体太小或模糊
  3. 机器学习算法在退行性颈椎和腰椎疾病中的应用:一项系统综述
  4. flutter - 强制横屏/竖屏
  5. 移动硬盘数据恢复需多少钱?关于这个不伤钱的方法
  6. java骰子_Java实现的简单掷骰子游戏示例
  7. 谈谈如何通过需求文档产生工作排期
  8. 知名APP(支付宝、微信、花瓣等)首页设计技巧及原型实例讲解
  9. WPS表格如何隔行填充颜色
  10. 273222-06-3,(2S,4R)-Boc-4-amino-1-Fmoc-pyrrolidine-2-carboxylic acid,(2S,4R)-Fmoc-4-叔丁氧羰基氨基吡咯烷-2-甲酸