刷抖音看到"三门问题",没理解,就写了代码来测
import java.util.Random;
/**
* @author: Fancg
* @date: 2020-08-17 21:31
* @describe: TODO
**/
public class ThreeDoor {
public static void main(String[] args) {
chooseTheDoor(1_000_000,false);
chooseTheDoor(1_000_000,true);
}
/**
*
* @param total 测试次数
* @param isChange 是否换门
*/
public static void chooseTheDoor(final int total,final boolean isChange){
//正确计数
int rightCount = 0;
//定义一个伪随机数组0是正确,1是错误
String[] door = new String[]{"011", "101", "110"};
for (int i = 0; i < total; i++) {
//生成一个长度为3的数组,模拟3门
String[] d = door[new Random().nextInt(3)].split("");
int[] doors = {Integer.parseInt(d[0]), Integer.parseInt(d[1]), Integer.parseInt(d[2])};
//模拟选中一个门,记录下标
int selected = new Random().nextInt(3);
//模拟在未选择的两个门中,选择其中一个错误的排除
int exclude = 0;
for (int x = 0; x < doors.length; x++) {
if (x != selected) {
if (doors[x] == 1) {
exclude = x;
break;
}
}
}
//selected+exclude+canChange=3 算出可以换的门的下标
int canChange = 3-exclude-selected;
//结果
if (doors[isChange?canChange:selected] == 0 ? true : false){
rightCount++;
}
}
System.out.println(String.format("是否换门:%s,总数:%d,正确次数:%d,正确率:%s",isChange==true?"是":"否",total,rightCount,rightCount/(total*1.0d)));
}
}