用C语言写一段生日悖论代码,要求输入n个人,输出这n个人生日都不同的概率,按一年365天算
时间: 2024-10-06 10:05:25 浏览: 52
在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减去这个概率就是所有人都不同生日的概率。
运行此程序时,请提供人数作为输入,它会返回相应概率的结果并以百分比形式展示。
阅读全文