題目:把n個骰子扔在地上,所有骰子朝上一面的點數之和為s。輸入n,列印出s的所有可能的值出現的概率。
解題思路:
第一步,確定問題解的表示式。可將f(n, s) 表示n個骰子點數的和為s的排列情況總數。
第二步,確定狀態轉移方程。n個骰子點數和為s的種類數隻與n-1個骰子的和有關。因為乙個骰子有六個點數,那麼第n個骰子可能出現1到6的點數。所以第n個骰子點數為1的話,f(n,s)=f(n-1,s-1),當第n個骰子點數為2的話,f(n,s)=f(n-1,s-2),…,依次類推。在n-1個骰子的基礎上,再增加乙個骰子出現點數和為s的結果只有這6種情況!那麼有:
f(n,s)=f(n-1,s-1)+f(n-1,s-2)+f(n-1,s-3)+f(n-1,s-4)+f(n-1,s-5)+f(n-1,s-6) ,0< n<=6n
f(n,s)=0, s< n or s>6n
上面就是狀態轉移方程,已知初始階段的解為:
當n=1時, f(1,1)=f(1,2)=f(1,3)=f(1,4)=f(1,5)=f(1,6)=1。
遞迴版本:
#include
#include
#include
using
namespace
std;
int fun(int n, int count)
int main()
system("pause");
return
0;}
迭代版本:
int getnsumcountnotrecusion(int n, int* count)
}return0;}
//驗證
int main()
delete count;
}}
劍指offer.何海濤.電子工業出版社.
n個骰子點數和及各自出現的概率
N個骰子點數之和的分布
將n個均勻的骰子,扔在地上,求點數之和的分布。因為是分布,自然是求n個篩子之和等於m的概率,p m p m fre n,m sum fre n,m 是指n個骰子扔出m個點數的 總的可能情況,這個就相當於組合數,只是限制了每個骰子的點數在1 6之間。sum是n個骰子扔地上所有可能情況之和。因為每個骰子...
n個骰子的點數
把n個骰子扔在地上,所有骰子朝上的一面的點數之和為s。輸入n,列印出s的所有可能的值和出現的概率。1 基於迴圈求骰子點數 2int g maxvalue 6 骰子的點數個數 3void printprobability int number number 為骰子個數49 int pprobabili...
n個骰子的點數
題目 把n個骰子扔在地上,所有骰子朝上一面的點數之和為s。輸入n,列印出s的所有可能的值出現的概率。方法一 遞迴 思路 設n個骰子某次投擲點數和為s的出現次數是f n,s 那麼,f n,s 等於n 1個骰子投擲的點數和為s 1 s 2 s 3 s 4 s 5 s 6時的次數的總和 f n s f n...