三门问题的模拟

三门问题来自于一个节目

参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车或者是奖品,选中后面有车的那扇门就可以赢得该汽车或奖品,而另外两扇门后面则各藏有一只山羊或者是后面没有任何东西。当参赛者选定了一扇门,但未去开启它的时候,知道门后情形的节目主持人会开启剩下两扇门的其中一扇,露出其中一只山羊。主持人其后会问参赛者要不要换另一扇仍然关上的门。

这个问题历来争议很大,但正确答案是确定的:换,2/3的概率获得奖品;不换,1/3的概率获得奖品。

随手写了一段代码模拟了一下

class Test3Doors {
    public static void main(String[] args) {
        int sum = 100000;
        int change = 0;
        int unchange = 0;
        int except = 0;
         
        int put,selected,opened,closed;

        int [] doors = new int [3];
        for (int i = 0; i < sum; i++) {
            //分配奖品
            put = (int)(Math.random()*100)%3;
            selected = (int)(Math.random()*100)%3;
            
            doors[0] = 0;doors[1] = 0;doors[2] = 0;                    
            doors[put] = 1;
            
            //打开一扇空的门
            if(doors[(selected + 1)%3]==0){
                opened = (selected + 1)%3;
                closed = (selected + 2)%3;
            }else{
                opened = (selected + 2)%3;
                closed = (selected + 1)%3;
            }
            
            //奖品在哪扇门后
            if(doors[closed] == 1){
                change++;
            }else if(doors[selected] == 1){
                unchange++;
            }else{
                except++;
            }
                                    
            
        }
        
        System.out.println("共进行了:" + sum + "次");
        System.out.println("改变后获得奖品:" + change + "次");
        System.out.println("未改变获得奖品:" + unchange + "次");
        System.out.println("打开的门:" + except + "次");
    }
}

结果如下:

共进行了:100000次
改变后获得奖品:66696次
未改变获得奖品:33304次
打开的门:0次

其实还有另一种思路:如果有1000扇门,选定一扇之后,主持人把剩下的998扇空门打开,这个时候你会换吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值