劍指 Offer 60 n個骰子的點數(簡單題)

2021-10-24 09:26:30 字數 1141 閱讀 4560

題目描述:

把n個骰子扔在地上,所有骰子朝上一面的點數之和為s。輸入n,列印出s的所有可能的值出現的概率。

你需要用乙個浮點數陣列返回答案,其中第 i 個元素代表這 n 個骰子所能擲出的點數集合中第 i 小的那個的概率。

示例 1:

輸入: 1

輸出: [0.16667,0.16667,0.16667,0.16667,0.16667,0.16667]

示例 2:

輸入: 2

輸出: [0.02778,0.05556,0.08333,0.11111,0.13889,0.16667,0.13889,0.11111,0.08333,0.05556,0.02778]

思路概述:

題目的意思是,n個骰子能搖出來的點數,按點數從小到大排序,對應的概率是多少。

分析:1個骰子點數:1 2 3 4 5 6 ,每個結果都只有1次組合,概率都為1/6

2個骰子點數:2 3 4 5 6 7 …10 11 12

其中2(1+1) 3(1+2,2+1) 4(1+3,2+2,3+1)…12(6 + 6)

也就是2個骰子,可以看作在1個骰子之後,又搖了乙個,目標點數=新骰子的點數+之前的點數

所以遞推方程:dp[n][k] = dp[n-1][k-1]+ dp[n-1][k-2]+ dp[n-1][k-3]+ dp[n-1][k-4]+ dp[n-1][k-5]+ dp[n-1][k-6]

**如下:

class

solution

for(

int i =

2; i <= n; i++

) dp[i]

[j]+= dp[i-1]

[j - k];}

}}double

res =

newdouble[5

* n +1]

;double sum = math.

pow(

6,n)

;for

(int i =

0; i < res.length; i++

)return res;

}}

劍指 Offer 60 n個骰子的點數

把n個骰子扔在地上,所有骰子朝上一面的點數之和為s。輸入n,列印出s的所有可能的值出現的概率。你需要用乙個浮點數陣列返回答案,其中第 i 個元素代表這 n 個骰子所能擲出的點數集合中第 i 小的那個的概率。示例 1 輸入 1 輸出 0.16667,0.16667,0.16667,0.16667,0....

劍指 Offer 60 n個骰子的點數

用dp i j 表示擲完 i 個骰子之後其點數之和為 j 的總次數,這可以由 投擲完 n 1 枚骰子後,對應點數 j 1,j 2,j 3,j 6 出現的次數之和轉化過來。即 1 class solution 910 for int i 2 i n i 17 18 1920 int total pow...

劍指 Offer 60 n個骰子的點數

dp三步走 1.表示狀態 dp i j 表示擲i個骰子,點數之和為j的概率。2.狀態轉移方程 遞推公式dp i j dp i 1 j 1 dp i 1 j 6 i個骰子和為j的概率 i 1個骰子和為j 1 最後乙個骰子擲出1的概率 i 1個骰子和為j 6 最後乙個骰子擲出6的概率 3.邊界處理 i ...