把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...