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
广告