算法—— n个骰子的点数

把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。
你需要用一个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰子所能掷出的点数集合中第 i 小的那个的概率。
leetcode

解题思路:迭代模拟每个情况下,概率的累加值。
分成三重循环:

  1. 第一层循环表示骰子的个数;
  2. 第二层循环表示当前骰子个数下,会存在几个情况,以及每种情况的概率;
  3. 第三层循环中计算当前情况的概率值,只需要在合适的区间范围上累加即可。
class Solution {
    public double[] dicesProbability(int n) {
        double pre[] = {1/6d, 1/6d, 1/6d, 1/6d, 1/6d, 1/6d};

        for(int i = 2; i <= n; i++) {
            double[]  cur = new double[i * 5 + 1];
            for(int j = 0; j < pre.length; j++) {
                for(int x = 0; x < 6; x++) {
                    cur[x + j] += pre[j]/6;
                }
            }
            pre = cur;
        }
        return pre;
    }
}
原文地址:https://www.cnblogs.com/lippon/p/14117652.html