题目:把 $n$ 个骰子扔在地上,所有骰子朝上一面的点数之和为 $s$。输入 $n$,打印出 $s$ 所有可能的值出现的概率。
一个骰子总共有 $6$ 面,所以总共有 $6^n$ 总情况,所以我们需要统计出所以 $s$ 可能出现的次数,然后除以 $6 ^ n$ 就可以得到所有值出现的概率。
现在的问题就是怎么统计 $s$ 点出现的次数,我们以 $f(i, s)$ 表示 $i$ 个骰子投出 $s$ 点的次数,因为第 $i$ 个骰子能够投出 $1, 2, 3, 4, 5, 6$ 点 $6$ 种情况,所以只要前 $i - 1$ 个骰子投出 $s-1, s-2, s-3, s-4, s-5, s-6$ 的点数,均可以使得 $i$ 个骰子投出 $s$ 点,所以我们可以得到这样的关系式
$$
f(i,s) = f(i-1, s-1) + f(i-1, s-2) + f(i-1, s-3) + f(i-1, s-4) + f(i-1, s-5)+ f(i-1, s-6)
$$
代码如下
public static double[] probability(int n) { |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Coder!
评论