三门问题代码
发布日期:2021-06-28 19:59:37 浏览次数:2 分类:技术文章

本文共 1665 字,大约阅读时间需要 5 分钟。

三门问题(Monty Hall problem)亦称为蒙提霍尔问题、蒙特霍问题或蒙提霍尔悖论,大致出自美国的电视游戏节目Let's Make a Deal。问题名字来自该节目的主持人蒙提·霍尔(Monty Hall)。参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车,选中后面有车的那扇门可赢得该汽车,另外两扇门后面则各藏有一只山羊。当参赛者选定了一扇门,但未去开启它的时候,节目主持人开启剩下两扇门的其中一扇,露出其中一只山羊。主持人其后会问参赛者要不要换另一扇仍然关上的门。问题是:换另一扇门是否会增加参赛者赢得汽车的机率。如果严格按照上述的条件,那么答案是会。不换门的话,赢得汽车的几率是1/3。换门的话,赢得汽车的几率是2/3。

虽然该问题的答案在逻辑上并不自相矛盾,但十分违反直觉。代码实验一下。

import java.util.Random;/** * 三门问题 * * @author xs * create-time: 2021-06-03 14:28 */public class ThreeDoor {    public static void main(String[] args) {        int succCount = 0;        for (int i=0; i<1000000; i++) {            if (choose()) {                succCount ++;            }        }        System.out.println("1000000次成功了" + succCount + "次");    }    private static boolean choose() {        // 1. 初始化选择        Random ran = new Random();        int carNum = ran.nextInt(3);        int userChoose = ran.nextInt(3);        // 2. 删除一个错误答案        int removeNum = doRemove(carNum, userChoose);        // 3. 换门        int changeToNum = change(userChoose, removeNum);        return changeToNum == carNum;    }    private static int change(int userChoose, int removeNum) {        return 3 - userChoose - removeNum;    }    private static int doRemove(int carNum, int userChoose) {        // 0,1,2中排除错误答案,且不能为用户选择的门        Random ran = new Random();        int result = -1;        do {             result = ran.nextInt(3);        } while (result == carNum || result == userChoose);        return result;    }}

实验结果:

1000000次成功了666848次

1000000次成功了666734次
1000000次成功了666356次
1000000次成功了666467次
1000000次成功了666649次
1000000次成功了666578次
1000000次成功了667333次
1000000次成功了666657次
1000000次成功了667355次
1000000次成功了666211次

转载地址:https://blog.csdn.net/xxxxssss12/article/details/117521670 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:>>>,>>的区别
下一篇:算法:第n个丑数-java

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年04月03日 22时39分28秒