📜  门|门 IT 2006 |第 73 题(1)

📅  最后修改于: 2023-12-03 14:58:36.007000             🧑  作者: Mango

门|门 IT 2006 | 第 73 题

题目描述:有n个红球和m个白球,从中任选k个球,求其中至少选出一半为红球的概率。

这道题需要掌握概率论中的基础知识,如组合计数、条件概率等。同时需要注意到题目中至少选出一半为红球,需要分类讨论计算概率。

首先,我们可以先求出总共的选球方案数,在n+m个球中选k个球的方案数为 C(n+m, k)。

然后,我们可以根据选出的红球数量来分类计算概率。如果选出r个红球,则选出至少r个红球的方案数为 C(n, r) * C(m, k-r)。因为选出了r个红球,则还需要从m个白球中选 k-r 个球,且选法必须互不相同,所以使用组合数计算方案数。

最后,根据全概率公式,将各种情况概率相加,即可得到答案。

代码实现如下:

def prob_red(n, m, k):
    """
    计算选出至少一半为红球的概率
    :param n: 红球数量
    :param m: 白球数量
    :param k: 总的选球数
    :return: 概率值
    """
    total = math.comb(n + m, k)
    half = k // 2
    prob = 0
    for r in range(half, n+1):
        prob += math.comb(n, r) * math.comb(m, k-r)
    return prob / total

print(prob_red(5, 7, 4))  # 0.35714285714285715

在上面的代码中,使用了 Python 中的 math.comb 函数来计算组合数,其中第一个参数为总数,第二个参数为选择数。最后返回的概率值为小数形式,即选出的方案中满足条件的概率值。