写一段生日悖论代码,要求输入n个人,输出这n个人生日都不同的概率,按一年365天算
时间: 2024-10-06 12:05:30 浏览: 30
生日悖论是一个统计现象,它表明在一个随机选择的小群体中,有很高概率会有两个人同一天生日。我们可以通过计算概率来模拟这个情况。下面是一个简单的Python代码示例:
```python
import random
def birthday_badox(n, days=365):
# 假设每一天都是独立的,每个人生日随机分布
sample = [random.randint(1, days) for _ in range(n)]
# 检查是否有重复的生日
has_duplicates = len(set(sample)) != n
if has_duplicates:
return "有两个人的生日相同"
else:
return f"所有{n}人的生日都不相同,概率约为{1 - (days / (days ** n)):.4f}"
# 输入人数
people_count = int(input("请输入人数:"))
probability = birthday_badox(people_count)
print(f"{probability}")
相关问题
用C语言写一段生日悖论代码,要求输入n个人,输出这n个人生日都不同的概率,按一年365天算
在C语言中,计算生日悖论的概率涉及到概率统计的知识。生日悖论是一个有趣的概率现象,即在一个群体中需要多少人才会有超过一半的人有相同的生日的概率大于50%。下面是一段简单的代码示例,它将利用二项分布的概率公式来估算这个概率:
```c
#include <stdio.h>
#include <math.h>
double factorial(int n) {
if (n == 0 || n == 1)
return 1;
else
return n * factorial(n - 1);
}
double binomial_probability(int N, int K, double p) {
return factorial(N) / (factorial(K) * factorial(N - K)) * pow(p, K) * pow(1 - p, N - K);
}
double birthday_puzzle(int n, int days_in_year) {
double probability = 1;
for (int i = 2; i <= n; ++i) {
probability *= (days_in_year - i + 1) / days_in_year;
}
return probability;
}
int main() {
int num_people;
printf("请输入人数: ");
scanf("%d", &num_people);
int days_per_year = 365;
double result = 1 - birthday_puzzle(num_people, days_per_year);
printf("当有%d人的时候,所有人生日都不相同的概率大约是: %.2f%%\n", num_people, result * 100);
return 0;
}
```
在这个程序中,我们首先定义了一个`factorial`函数来计算阶乘,然后计算给定N个人中有K个人生日相同的二项分布概率。接着在`birthday_puzzle`函数中,我们通过累乘每增加一个人,其生日与其他人不相同的概率来进行计算。最后,1减去这个概率就是所有人都不同生日的概率。
运行此程序时,请提供人数作为输入,它会返回相应概率的结果并以百分比形式展示。
写一个验证生日悖论的python代码
### 回答1:
生日悖论是指,如果在一个人群中随便选两个人,那么他们的生日很可能相同。这个“悖论”听起来很玄学,但是实际上可以用数学来证明。
要验证生日悖论,我们可以编写一个 Python 程序来模拟这个过程。首先,我们需要导入必要的库:
```
import random
import datetime
```
然后,我们可以定义一个函数 `has_duplicate_birthdays`,用于验证在一个人群中是否有两个人生日相同。该函数接受一个参数 `n`,表示人群的大小。
在函数内部,我们可以使用 Python 的 `random` 模块来生成 `n` 个随机日期。我们可以使用 `datetime` 模块的 `date` 类来表示日期,并使用 `datetime.date.today()` 函数来获取当前日期。我们可以使用 `random.randint` 函数来生成随机的年份、月份和日期。
接下来,我们可以使用 Python 的内置函数 `set` 来检查是否存在相同的生日。如果存在,则返回 `True`;否则,返回 `False`。
综上所述,可以得到如下代码:
```
def has_duplicate_birthdays(n: int) -> bool:
birthdays = []
for i in range(n):
year = random.randint(1900, datetime.date.today().year)
month = random.randint(1, 12)
day = random.randint(1, 28)
birthday = datetime.date(year, month, day)
### 回答2:
生日悖论指的是在一群人中,只需要有23个人,就有半数以上的概率会有至少两个人生日相同的情况。下面是一个用Python编写的验证生日悖论的代码:
```python
import random
def generate_birthdays(num_people):
birthdays = []
for _ in range(num_people):
# 生成随机的生日(1月1日至12月31日)
birthday = random.randint(1, 365)
birthdays.append(birthday)
return birthdays
def check_duplicate_birthdays(birthdays):
# 判断是否有生日重复的情况
if len(birthdays) == len(set(birthdays)):
return False
else:
return True
def birthday_paradox_simulation(num_simulations, num_people):
num_duplicates = 0
for _ in range(num_simulations):
birthdays = generate_birthdays(num_people)
if check_duplicate_birthdays(birthdays):
num_duplicates += 1
probability = num_duplicates / num_simulations
return probability
num_simulations = 10000
num_people = 23
probability = birthday_paradox_simulation(num_simulations, num_people)
print(f"在{num_simulations}次模拟中,当有{num_people}个人时,至少有两人生日相同的概率为: {probability:.4f}")
```
代码中,首先定义了生成随机生日的函数`generate_birthdays()`,然后定义了判断是否有生日重复的函数`check_duplicate_birthdays()`。
接着,通过调用`birthday_paradox_simulation()`函数来进行模拟。这个函数接受模拟次数和人数作为参数,然后循环进行模拟,并统计有生日重复的次数。最后计算出重复的概率,并返回该结果。
最后,在主程序中设置模拟次数为10000次,人数为23人,然后输出概率结果。该结果表示,在这么多次模拟中,有多少次至少会有两个人的生日相同。
### 回答3:
生日悖论是指在一群人中,两人有相同生日的概率远大于我们直觉的概率。下面是一个简单的Python代码来验证生日悖论:
```python
import random
def has_same_birthday(num_people):
birthdays = [] # 存储生日的列表
for _ in range(num_people):
birthday = random.randint(1, 365) # 随机生成一个生日(1-365代表一年中的天数)
if birthday in birthdays: # 如果生成的生日在列表中已经存在,则返回True
return True
birthdays.append(birthday) # 将新生成的生日添加到列表中
return False
def birthday_paradox(num_simulations, num_people):
num_matches = 0 # 记录出现相同生日的次数
for _ in range(num_simulations):
if has_same_birthday(num_people): # 如果在一次模拟中出现相同生日,则次数加1
num_matches += 1
probability = num_matches / num_simulations # 计算出现相同生日的概率
return probability
num_simulations = 10000 # 模拟次数
num_people = 23 # 人数
probability = birthday_paradox(num_simulations, num_people)
print("在{}次模拟中,{}人中有相同生日的概率为:{:.4f}".format(num_simulations, num_people, probability))
```
上述代码中有两个函数,`has_same_birthday`函数用于检查一组人的生日中是否有相同的生日,`birthday_paradox`函数用于进行多次模拟并计算相同生日出现的概率。最后打印出10000次模拟中23人中有相同生日的概率。根据生日悖论的理论结果,结果应该接近0.5075(50%以上)。
阅读全文