参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车,选中后面有车的那扇门可赢得该汽车,另外两扇门后面则各藏有一只山羊。
当参赛者选定了一扇门,但未去开启它的时候,节目主持人开启剩下两扇门的其中一扇,露出其中一只山羊。
主持人其后会问参赛者要不要换另一扇仍然关上的门。问题是:你是否会重选?为什么?
package demo;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
/**
* @author 苏一叶 E-mail:by.su@qq.com
* @version 创建时间: 2017年2月7日13:39:14
*/
public class MotyHall {
/**
* 1.先设置随机奖品摆放
* 2.设置随机的选择
* 3.支持人确定是否选中,然后打开不对的选项
* 4.不重选,是否正确;重选是否正确
* 5.模拟20万次,计算并统计结果
*/
public static void main(String[] args) {
int right = 0;//对的次数
int wrong = 0;//错的次数
boolean yes = false;//true为重选,false为不重选
for(int i=0;i<200000;i++){
ArrayList JPResult = (ArrayList)setJP();
Collections.shuffle(JPResult);//让奖品随机
String chooseResult = (String)JPResult.get(setChoose());//随机结果
if(chooseResult.equals("a")){//如果选中的是对的
if(yes == true){//重选,那就是一定是错的
wrong ++;
}else{
right ++;
}
}else{//如果选择的是错的
if(yes == true){//重选之后,肯定是对的
right ++;
}else{//不重选,那么就是错的
wrong ++;
}
}
}
System.out.println("yes默认为false时,right = " + right);
System.out.println("yes默认为false时,wrong = " + wrong);
}
//随机选
public static int setChoose(){
return new Random().nextInt(3);
}
//设置奖品,a是对,b是错
public static List setJP(){
ArrayList<String> map = new ArrayList<>();
map.add("a");
map.add("b");
map.add("b");
return map;
}
}
yes为false,也就是不重选的模拟结果:
yes默认为false时,right = 66528
yes默认为false时,wrong = 133472
故此:重选中的概率是三分之二的分析没毛病。^_^
以上不考虑算法最优。有好的算法,还请多多指教。谢谢