给定一定数量的骰子,如何控制事件发生的概率

How to control the probablity of an event given a certain number of dice rolls

我有一款回合制游戏。我为玩家设置了一个条件,即在接下来的 X 固定回合数中 he/she 有 Y 百分比的机会触发其他事件(比如游戏结束)。

所以说 x = 5y = 80%。我需要抛硬币 5 次(最多),并且在 每次抛硬币 时,修改结果百分比(在 true 和 false 之间)以便 combined/average百分比 在所有 5 个回合中滚动正确的可能性等于 80%。

如果我每次掷骰的概率为 80%,那么在 5 个回合内平均概率不会达到 80%(要高得多)。那么,给定 x 次抛硬币,如何强制 y %(大致)?

我在JavaScript工作。

编辑:

根据 Thiatt 的建议,我在下面实现了这段代码(假设 0.16 超过 5 回合将产生 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');
}

简单地让 80% 为真:

if(Math.random()<0.8) alert("we were the lucky 80%!");

一些解释:

假设我们掷骰子。如果我们想赢 50%,我们简单地说,那个人确实在 1、2、3 赢了,在 4、5、6 输了。

win=RollDice()<3;

同样的原理也可以用在Math.random上。它 returns 一个介于 0 和 1 之间的数字,因此 80% 将是 0.8。

P = Y/X

对于 5 次掷骰,如果每次掷骰都有 16% 的几率触发事件,则有 80% 的几率在 5 次掷骰后触发事件。

或者如果您想在所有剩余的掷骰中保持 80% 的概率:

P(n) = Y/(X-n+1)

因此,如果第一次掷骰为假,则其余 4 次为真的概率为 80%。如果前两次为假,则其他 3 次为真的概率为 80%,依此类推

我对你的问题的解析是,使用你的示例数字,你希望用户在 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%。