Skip to content

N个骰子投出x的概率

n个骰子投出x的概率

从数学上推导公式十分复杂,但满足动态规划的条件,具有递推性质。

class Solution {
public:
    vector<double> dicesProbability(int n) {
        map<pair<int, int>, int> dp;
        for (int i = 1; i <= 6; i++) dp[{1, i}] = 1;
        for (int i = 2; i <= n; i++) {
            for (int x = i; x <= 6 * i; x++) {
                for (int j = 1; j <= 6; j++) {
                    dp[{i, x}] += dp[{i-1, x - j}];
                }
            }
        }
        vector<double> ans;
        for (int x = n; x <= 6 * n; x++) {
            ans.push_back((double)dp[{n, x}] / pow(6, n));
        }
        return ans;
    }
};

数学公式:

出现\(k\)的概率为\(x^k\)的系数。

\[ \displaylines{ (x+x^2+x^3+x^4+x^5+x^6)^n / 6^n } \]

可以通过扩展二项式定理展开:

然而展开的系数公式过于复杂,所以没法用。