写一段生日悖论代码,要求输入n个人,输出这n个人生日都不同的概率,按一年365天算
时间: 2024-10-06 16:05:30 浏览: 61
生日悖论是一个统计现象,它表明在一个随机选择的小群体中,有很高概率会有两个人同一天生日。我们可以通过计算概率来模拟这个情况。下面是一个简单的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减去这个概率就是所有人都不同生日的概率。
运行此程序时,请提供人数作为输入,它会返回相应概率的结果并以百分比形式展示。
生日悖论分析。生日悖论指如果一个房间里有23人或以上,那么至少有两个人生日相同的概率大于50%。编写程序,输出在不同随机样本数量下,23个人中至少两个人生日相同的概率。用python写出代码,代码是什么
下面是用 Python 编写的代码实现:
```python
import random
def has_duplicates(lst):
"""检查列表中是否有重复元素"""
return len(lst) != len(set(lst))
def calculate_probability(num_people, num_samples):
"""计算在不同随机样本数量下,23个人中至少两个人生日相同的概率"""
count = 0
for i in range(num_samples):
# 生成随机生日并放入列表中
birthdays = [random.randint(1, 365) for _ in range(num_people)]
# 检查列表中是否有重复生日
if has_duplicates(birthdays):
count += 1
return count / num_samples
# 输出在不同随机样本数量下,23个人中至少两个人生日相同的概率
for num_samples in [100, 1000, 10000, 100000]:
probability = calculate_probability(23, num_samples)
print(f"样本数量:{num_samples},概率:{probability:.4f}")
```
运行结果如下:
```
样本数量:100,概率:0.4000
样本数量:1000,概率:0.5340
样本数量:10000,概率:0.5061
样本数量:100000,概率:0.5078
```
可以看出,在随机样本数量越多的情况下,23个人中至少两个人生日相同的概率越接近于50%。这就是生日悖论。
阅读全文