面試題60 n個骰子的點數 Python題解

2021-10-10 14:05:57 字數 1328 閱讀 7146

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

限制:1 <= n <= 11

class

solution

:def

dicesprobability

(self, n:

int)

-> list[

float]:

dp =[[

0for _ in

range(6

*n+1)]

for _ in

range

(n +1)

]# 給第乙個骰子值進行賦值,每乙個點都出現一次的次數相同,則都為1

for i in

range(1

,7):

# 第乙個骰子1面出現的次數為1,則就把i=1這個位置設定成1

dp[1]

[i]=

1# print(dp)

# 通過動態規劃得到後面骰子出現的次數

for i in

range(2

,n +1)

:for j in

range

(i, i *6+

1):# j 代表n個骰子和可能出現的數字

for k in

range(1

,7):

# k表示第n個骰子一共有幾個表

if j > k:

#表示的前i-1個骰子的j-k的值加上第i個骰子的k值,最終等於j這個值,我們得到當前骰子的值加上前i-1個骰子的和的哪些等於前i個骰子可能出現的和

# print(j, j - k)

dp[i]

[j]+= dp[i -1]

[j - k]

res =

# print(dp)

# n個骰子的最小值為n,最大值為n*6

for i in

range

(n, n*6+

1):[i]

*1.0/6

**n)

return res

劍指 面試題60 n個骰子的點數

題目 把n個骰子扔在地上,所有骰子朝上一面的點數之和為s。輸入n,列印出s的所有可能的值出現的概率。你需要用乙個浮點數陣列返回答案,其中第 i 個元素代表這 n 個骰子所能擲出的點數集合中第 i 小的那個的概率。思路 動態規劃 參考leetcode題解 c class solution int su...

力扣面試題60 n個骰子的點數

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

力扣 面試題60 n個骰子的點數

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