Python程式:計算n個或更少點數的機率
假設我們正在玩一個獨特的遊戲,我們有三個值n、k和h。我們從0分開始,然後我們可以隨機選擇1到h(包括1和h)之間的數字,我們將獲得那麼多分數。當我們至少獲得k分時停止。我們必須找到我們獲得n分或更少分數的機率。這裡任何數字都可以隨機選擇,並且所有結果都有相同的機率。
因此,如果輸入類似於n = 2,k = 2,h = 10,則輸出將為0.11。
為了解決這個問題,我們將遵循以下步驟:
定義一個函式dp()。這將取path作為引數。
如果path等於k - 1,則
返回 (min(n - k + 1, h) / h)
如果path > n,則
返回0
如果path >= k,則
返回1
返回 dp(path + 1) - (dp(path + h + 1) - dp(path + 1)) / h
在主函式中,執行以下操作:
如果k為零,則
返回1
如果n < k,則
返回0
返回dp(0)
讓我們看看下面的實現,以便更好地理解:
示例
class Solution: def solve(self, n, k, h): if not k: return 1 if n < k: return 0 def dp(path): if path == k− 1: return min((n− k + 1), h) / h if path > n: return 0 if path >= k: return 1 return dp(path + 1)− (dp(path + h + 1)− dp(path + 1)) / h return dp(0) ob = Solution() print(ob.solve(2,2,10))
輸入
2,2,10
輸出
0.11
廣告