60 n個骰子的點數

2021-10-02 17:09:57 字數 881 閱讀 7509

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

解法一:遞迴。可以先把n個骰子分為兩堆:第一堆只有乙個;另一堆有n-1個。單獨的那個有可能出現1~6的點數。接下來問題轉化成1~6的每一種點數和剩下的n-1個骰子來計算點數和。接下來把n-1個骰子仍然分成兩堆:第一堆只有乙個,第二堆只有n-2個。以此類推,最終遞迴結束的條件是最後只剩下乙個骰子。**如下:

public

void

printprobability_1

(int number)

}public

void

probability

(int number,

int count,

int sum,

int[

] probabilities)

for(

int i=

1;i<=

6;i++

)}

解法二:解法一基於遞迴實現,效率較低。基於迴圈求骰子點數,時間效能更好。**如下:

public

void

printprobability_2

(int number)

for(

int k=

2;k<=number;k++

)for

(int i=k;i<=k*

6;i++)}

}float total =

(float

)math.

pow(

6, number)

;for

(int i=number;i<=maxsum;i++

)}

60 n 個骰子的點數

lintcode 把 n 個骰子扔在地上,求點數和為 s 的概率。使用乙個二維陣列 dp 儲存點數出現的次數,其中 dp i j 表示前 i 個骰子產生點數 j 的次數。空間複雜度 o n2 public list dicessum int n 空間複雜度 o n public list dices...

60 n個骰子的點數概率

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

劍指 Offer 題解 60 n 個骰子的點數

把n個骰子仍在地上,所有的骰子朝上的一面的點數之和為s,輸入n,列印出s所有可能的值出現的概率。乙個骰子的情況 input n 1output 1,0.17 2,0.17 3,0.17 4,0.17 5,0.17 6,0.17 兩個骰子的情況 input n 2output 2,0.03 3,0.0...