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 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告