1

我正在编写代码来解决这个问题:

你和你的朋友在纽约,正计划去看一场百老汇音乐剧。不幸的是,纽约就是纽约,门票只是有点贵。但是其中一个节目每晚都有一张彩票,像你这样的穷人有机会赢得购买稍微便宜一点的好座位门票的权利。彩票操作如下。首先,每个有兴趣的人都进入彩票。然后,抽出 n 位幸运中奖者,每人最多可购买 t 张门票。

给定您组中的人数 p(所有这些人都参加了抽奖)和参加抽奖的总人数 m,您能够获得整个组的门票的概率是多少?假设n个幸运的中奖者是从m人中均匀随机抽取的,每个人最多可以中奖一次。

这是我的代码:

import math

def lottery():

    m = int(raw_input('The number of people who entered the lottery: '))
    n = int(raw_input('The number of winner drawn from the total: '))
    t = int(raw_input('The number of tickets each winner can purchase: '))
    p = int(raw_input('The number of people in your group: '))

    def combinations(n, k):
        if 0 <= k <= n:
            ntok = 1
            ktok = 1
            for t in xrange(1, min(k, n - k) + 1):
                ntok *= n
                ktok *= t
                n -= 1
            return ntok // ktok
        else:
            return 0

    needed_wins = int(math.ceil(p/t))

    others = m - p

    loss = 0
    for i in range(needed_wins):
        loss += combinations(others, n-i) * combinations(p, i)

    total = combinations(m, n)

    prob = 1 - loss / total

    print(prob)

我试图运行它,但结果是错误的。例如,如果组合为 (100,10,2,1),则结果应为 0.1;相反,它返回了 1。如果有人能在这里帮助我,我真的很感激。

4

1 回答 1

5

在 Python 2 中,当你将两个整数相除时,你总是得到一个整数结果。尝试将此行添加到文件的顶部,这将为您提供新的 Python 3 行为,其中除法整数会产生浮点数:

from __future__ import division
于 2012-12-24T02:35:52.060 回答