求n個骰子各點數和出現的概率-動態規劃
阿新 • • 發佈:2019-01-31
這幾天在看劍指offer的時候發現,求n個骰子個點數和這個問題是發現書中講的不是很清楚,於是查詢資料,覺得下面講的比較透徹,記錄如下:
題目:把n個骰子扔在地上,所有骰子朝上一面的點數之和為S。輸入n,打印出S的所有可能的值出現的概率。
宣告思想非原創!只因動態規劃思想的使用很好,記下!
分析:動態規劃就是分階段考慮問題,給出變數,找出相鄰階段間的關係。具體定義給忘了。
1.現在變數有:骰子個數,點數和。當有k個骰子,點數和為n時,出現次數記為f(k,n)。那與k-1個骰子階段之間的關係是怎樣的?
2.當我有k-1個骰子時,再增加一個骰子,這個骰子的點數只可能為1、2、3、4、5或6。那k個骰子得到點數和為n的情況有:
(k-1,n-1):第k個骰子投了點數1
(k-1,n-2):第k個骰子投了點數2
(k-1,n-3):第k個骰子投了點數3
....
(k-1,n-6):第k個骰子投了點數6
在k-1個骰子的基礎上,再增加一個骰子出現點數和為n的結果只有這6種情況!
所以:f(k,n)=f(k-1,n-1)+f(k-1,n-2)+f(k-1,n-3)+f(k-1,n-4)+f(k-1,n-5)+f(k-1,n-6)
3.有1個骰子,f(1,1)=f(1,2)=f(1,3)=f(1,4)=f(1,5)=f(1,6)=1。
那程式碼就容易寫了,遞迴函式,返回和為n出現的次數。所有的和出現次數總和為6^n。