Created
March 5, 2018 06:44
-
-
Save TooBug/2af01dbe55c90f442891a7d717e0f0ff to your computer and use it in GitHub Desktop.
三门问题
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'use strict'; | |
/** | |
* 模拟一次游戏过程 | |
* @param {Boolean} isKnown 主持人(卖水的)是否是故意选择(否则是随机选择) | |
* @return {Boolean} 选择不交换的结果是否猜中(即交换后没猜中的情况) | |
*/ | |
function isWin(isKnown){ | |
// 目标在几号 | |
var target = (Math.random()*3) | 0; | |
// 猜的是几号 | |
var guess = (Math.random()*3) | 0; | |
if(isKnown){ | |
// 如果是故意选择,则剩下的两个一定是一个中一个没中 | |
// 只要返回一开始选择的有没有中 | |
return target === guess; | |
}else{ | |
// 主持人随机选择的是几号 | |
var random = (Math.random()*3) | 0; | |
// 按照条件,不能选择猜的那一个 | |
while(random === guess){ | |
random = (Math.random()*3) | 0; | |
} | |
if(random === target){ | |
// 如果主持人随机选中了目标,和题设不符,丢弃(报错) | |
throw new Error('wrong'); | |
}else{ | |
// 如果主持人随机没有选中目标,返回一开始选择的有没有中 | |
return target === guess; | |
} | |
} | |
} | |
function run(isKnown,count){ | |
var result = { | |
win:0, | |
lose:0 | |
}; | |
for(let i=count;i--;){ | |
try{ | |
let winResult = isWin(isKnown); | |
if(winResult){ | |
result.win++; | |
}else{ | |
result.lose++ | |
} | |
}catch(e){ | |
} | |
} | |
return result; | |
} | |
console.log('主持人故意选择',run(true,10000)); | |
console.log('主持人随机选择',run(false,10000)); | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment