我有一个回合制游戏。我在玩家身上设定了一个条件,即在下一个X
固定转弯次数内,他/她有Y
次触发其他事件的比例(比如游戏结束)。
所以说x = 5
和y = 80%
。我需要翻转一次硬币5次(最大值)和每次硬币翻转,修改结果百分比(真假之间),以便合并/平均百分比可能性在所有5个回合中滚动为真等于80%。
如果我使每次掷骰子的几率达到80%,那么在5转之内不会平均达到80%(它会高得多)。那么,如何强制y%(粗略地)给出x硬币翻转?
我在使用JavaScript。
编辑:
根据Thiatt的建议,我在下面执行此代码(假设超过5转的0.16将产生80%)。实际上它接近68%。
这似乎很接近,但是当我实施时,它接近70%:
for(var k = 0; k < 20; k++){
var totalHit = 0;
for(var i = 100; i >=0; i--){
var hit = false;
for(var j = 0; j < 5; j++){
var roll = rollDice(1, 100);
hit = roll <= 20;
if(hit){
totalHit++;
break;
}
}
}
debug('Hit ' + totalHit + '/100');
}
答案 0 :(得分:2)
我的问题解析是,使用您的示例数字,您希望用户不会触发超过5圈的事件Y的概率为0.2。也就是说,他们有0.8次触发事件Y的机会至少一次(1,2,3,4或5次,而不是零次)。
您正在使用硬币,因此每轮都有两个可能的事件。在一轮中不触发的概率将是(1-p),其中p是您要求的理想概率。超过五轮你有(1-p)(1-p)(1-p)(1-p)(1-p)=(1-p)^ 5 = 0.2,求p给出~0.275或27.5% 。如果你有27.5%的几率在每次掷骰时触发Y,则触发Y至少一次的概率为80%。
答案 1 :(得分:0)
简单地让80%为真:
if(Math.random()<0.8) alert("we were the lucky 80%!");
一些解释:
让我们说我们掷骰子。如果我们想赢得50%的胜利,我们只是说,一个赢得1,2,3并且宽松到4,5,6。
win=RollDice()<3;
Math.random可以使用相同的原理。它返回0到1之间的数字,因此80%将为0.8。
答案 2 :(得分:0)
P = Y / X
对于5个掷骰子,如果每个掷骰子有16%的几率触发该事件,那么该事件将在5个掷骰子中被触发的几率为80%。
或者,如果你想在所有剩余的卷上保持80%的概率:
P(n)= Y /(X-n + 1)
因此,如果第一次掷骰是假的,那么剩余的4%就有80%的机会获得真实。如果前两个是假的,那么在另一个上有80%的变化是真的。 3,等等。