玩命加载中 . . .

60-n个骰子的点数


剑指 Offer 60. n个骰子的点数

把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。

你需要用一个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰子所能掷出的点数集合中第 i 小的那个的概率。

示例 1:

输入: 1
输出: [0.16667,0.16667,0.16667,0.16667,0.16667,0.16667]

method

vector<double> dicesProbability(int n) {
    // n个骰子的情况是[n, 6n],总共是6n-n+1=5n+1种情况
    vector<double> dp(6, 1 / 6.0);
    for (int i = 2; i <= n; i++) {
        vector<double> tmp(5 * i + 1, 0);
        for (int j = 0; j < dp.size(); j++) {
            for (int k = 0; k < 6; k++) {
                tmp[j + k] += dp[j] / 6.0;
            }
        }
        dp = tmp;
    }
    return dp;
}

文章作者: kunpeng
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 kunpeng !
  目录