三门问题来自于一个节目
参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车或者是奖品,选中后面有车的那扇门就可以赢得该汽车或奖品,而另外两扇门后面则各藏有一只山羊或者是后面没有任何东西。当参赛者选定了一扇门,但未去开启它的时候,知道门后情形的节目主持人会开启剩下两扇门的其中一扇,露出其中一只山羊。主持人其后会问参赛者要不要换另一扇仍然关上的门。
这个问题历来争议很大,但正确答案是确定的:换,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扇空门打开,这个时候你会换吗?