对于三扇门的概率问题,通常是指著名的蒙提霍尔问题(Monty Hall problem)。
蒙提霍尔问题描述如下:你面前有三扇门,其中一扇门后面有个大奖,另外两扇门后面是安慰奖(比如空气清新剂)。你首先选择一扇门,然后主持人会打开另外两扇门中的一扇,露出一个安慰奖。你现在有两个选择:保持你的初选,或者换到另一扇未打开的门。问题是,如果你想获得大奖,是保持初选还是换门?
答案是,你应该换门。这是因为在初始选择时,你有1/3的概率选择到大奖。而当主持人打开另外一扇门后,其实并没有改变之前的概率分布,只是将剩下的概率集中到了未打开的门中。所以,没换门的概率仍然是1/3,而换门的概率就是不换门概率的补集,即2/3。因此,换门的机会更大,获得大奖的概率也更高。
这个问题的解答可能与直觉相悖,但经过数学和概率的分析可以证明,换门确实可以提高获奖的概率。这是一个经典的概率问题,那么可以用编程模拟多次试验来验证这个结论。
import java.util.Random;
/**
* 概率问题
* 在你面前有三扇门,一扇后面是出口,其他两扇门后面是墙壁,
* 你选一扇门,当你选择之后,另外两扇门会去除一扇是墙壁的门,此时你换不换你的选择
*
* 假设 1 2 3 三扇门,3号是生门
*/
public class g03 {
public static void main(String[] args) {
//执行100万次
int Number = 1000000;
System.out.println("不换赢的概率为: " + calculateProbability(Number, false));
System.out.println("换赢的概率为: " + calculateProbability(Number, true));
}
//对选的结果进行解析
public static double calculateProbability(int Number, boolean switchDoor) {
double win = 0;
double total = Number;
int[] doorArray = generateDoors(Number);
for (int i = 0; i < Number; i++) {
if (doorArray[i] == 3) {
if (!switchDoor) {
win++;
}
} else {
if (switchDoor) {
win++;
}
}
}
return win / total;
}
//定义选的门
public static int[] generateDoors(int nums) {
int[] doors = new int[nums];
for (int i = 0; i < nums; i++) {
Random random = new Random();
int randomNumber = random.nextInt(3) + 1;
doors[i] = assignDoor(randomNumber);
}
return doors;
}
//定义门号
public static int assignDoor(int number) {
int door;
switch (number) {
case 1:
door = 1;
break;
case 2:
door = 2;
break;
default:
door = 3;
break;
}
return door;
}
运行结果为: