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

更新於:2020年12月26日

69 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告