验证生日悖论

题目:

生日悖论,指如果一个房间里有23个或23个以上的人,那么至少有两个人的生日相同的概率要大于50%。尝试编程验证。

验证方法提示:使用从1到365的整数代表生日。测试n次,每次生成23个随机数,随机数的范围从1到365(包括365)。
然后查看有无重复的生日。
最后算出重复的比率。

输入格式:

随机数种子x 测试次数n

注意:需将x转换为整数型再进行设置。

输出格式:

rate=算出的比率,比率保留2位小数

输入样例:

3 1000

输出样例:

rate=0.54

代码展示: 

import random
x,n=map(int,input().split()) 
random.seed(x)
f=0
for i in range(n):
    s=set()
    for j in range(23):
        c=random.randint(1,365)
        s.add(c)
    if len(s)<23:
        f+=1
print(f'rate={f/n:.2f}')

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
生日悖论是指在一个包含至少23个人的房间里,至少有两个人生日相同的概率大于50%。为了验证这个悖论,可以使用Python编写一个模拟程序。 以下是一个简单的Python程序,用于验证生日悖论: ```python import random def has_duplicates(lst): """判断列表中是否有重复元素""" return len(lst) != len(set(lst)) def generate_birthday(): """生成一个随机生日""" return random.randint(1, 365) def simulation(num_people): """进行一次模拟,返回是否有两个人生日相同""" birthdays = [generate_birthday() for i in range(num_people)] return has_duplicates(birthdays) def calculate_probability(num_people, num_simulations): """计算概率""" num_successes = 0 for i in range(num_simulations): if simulation(num_people): num_successes += 1 return num_successes / num_simulations if __name__ == '__main__': num_people = 23 num_simulations = 10000 probability = calculate_probability(num_people, num_simulations) print(f"在 {num_people} 个人中至少有两个人生日相同的概率为 {probability:.2%}") ``` 这个程序首先定义了一个`has_duplicates`函数,用于判断一个列表中是否有重复元素。然后定义了一个`generate_birthday`函数,用于生成一个随机生日。接着定义了一个`simulation`函数,用于进行一次模拟,返回是否有两个人生日相同。最后定义了一个`calculate_probability`函数,用于计算概率。 在主程序中,设置了23个人和10000次模拟,并调用`calculate_probability`函数计算概率。最后输出结果。 运行程序,可以得到类似以下的结果: ``` 在 23 个人中至少有两个人生日相同的概率为 50.13% ``` 可以看到,这个结果符合生日悖论的预期。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值