剑指 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;
}