@
estk 我也懒得改你的代码了,我重新写了一份,包含原本的三门和主贴里描述的三门,你运行一下看吧
(() => {
const rand3 = () => Math.floor(Math.random()*3)%3
const next = (cur) => (cur+1)%3
let noswap_wins = 0 // 维持原始选择
let swap_wins = 0 // 交换选择
let reselect_wins = 0 // 重新随机选择(主贴所描述的三门)
const loop = 100000
for(let i=0; i<loop; i++){
const goal_door = rand3() // 有奖品的门
const selected_door = rand3() // 参赛者选择的门
let opened_door, swap_door // 主持人打开的门,可以交换的门
// 主持人在未选择的两扇门中打开一扇没有奖品的门,并设置另一扇门为交换门
opened_door = next(selected_door)
if(opened_door !== goal_door){
swap_door = next(opened_door)
}else{
swap_door = opened_door
opened_door = next(opened_door)
}
// 如果这时候在两扇未开的门中重新随机选择(主贴所描述的三门)
let reselected_door = next(opened_door)
if(Math.random() > 0.5)
reselected_door = next(reselected_door)
// 统计结果
if(selected_door === goal_door)
noswap_wins++
if(swap_door === goal_door)
swap_wins++
if(reselected_door === goal_door)
reselect_wins++
}
console.log("不交换:" + noswap_wins/loop + " / 交换:" + swap_wins/loop + " / 重新随机选:" + reselect_wins/loop)
})()