如何在给定一定数量的骰子卷的情况下控制事件的可能性

时间:2017-05-28 17:03:08

标签: javascript probability

我有一个回合制游戏。我在玩家身上设定了一个条件,即在下一个X固定转弯次数内,他/她有Y次触发其他事件的比例(比如游戏结束)。

所以说x = 5y = 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');
}

3 个答案:

答案 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,等等。