我有可变数量的骰子和骰子类型(例如 4 面、6 面等),但骰子类型从不混合。我需要使用骰子和边的任何变化来计算某个结果的概率。例如,给定 3 个六面骰子(我们将其写为 3d6),掷出 3 的概率为 0.46% (100 / 6^3 = 0.46)。
概率=期望结果的数量÷可能结果的数量
- 可能结果的数量:骰子数量的幂的边数,例如。6^3。
- 期望结果的数量:?
对此的应用是骰子公式可以具有修饰符,例如。3d6-5,我想计算结果为零或更低的机会。
因此,我想通过将 的百分比相加来总结总机会。示例(使用 anydice.com),对于(3d6)-5,我将添加 3 (0.46%)、4 (1.39%)、5 (2.78%) 的掷骰机会,得出的结论是滚动等于或小于 0 的几率为 4.63%。
我正在寻找一种在Javascript中以某种方式执行此操作的有效方法。
编辑:订单很重要!一卷 6、1 和 2 与 1、2 和 6 不同。这不是一个组合问题,正如 Barmar 建议的 Medium 文章中所述。
编辑:评论要求(理所当然地)代码。由于我没有关于如何计算它的假设,因此我对此没有太多了解,但这就是我所拥有的:
function dieAvg(sides) {
return ((sides+1)/2);
}
// dice = number of dice
// die = sides, eg. 6 for a square dice
// mod = a modifier, positive or negative to apply to the result
function getDiceStats(dice, die, mod) {
let avg = (dieAvg(die)*dice) + mod;
let min = dice + mod;
let max = die*dice) + mod;
let zeroChance = 0; // TODO!
return [min,max,avg, zeroChance];
}
有点相关的问题(java):计算滚动某个数字的方式数