用C语言编写程序,输入当一个班有N个人,输出有人生日相同的概率分别是多少
时间: 2024-09-20 14:05:01 浏览: 59
在C语言中,我们可以使用上述提到的模拟方法来估算特定班级里有多人生日相同的概率。下面是一个简化版的程序,它会根据用户输入的班级人数计算概率:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h> // 使用time()函数设置随机数种子
// 定义计算概率的函数
double birthday_problem(double N) {
int days[] = {0};
for (int i = 1; i <= 365; i++) {
days[i] = 0;
}
int total_trials = 100000; // 进行大量试验以获得更准确的结果
int same_birthday_count = 0;
for (int trial = 0; trial < total_trials; trial++) {
for (int person = 0; person < N; person++) {
int random_day = rand() % 366; // 年天数考虑闰年
days[random_day]++;
}
if (has_duplicate_birthday(days)) {
same_birthday_count++;
}
}
double probability = (double)same_birthday_count / total_trials;
return probability;
}
// 判断是否有重复的生日
int has_duplicate_birthday(int days[]) {
for (int i = 0; i < 365; i++) {
if (days[i] >= 2) {
return 1; // 有重复生日
}
}
return 0; // 没有重复生日
}
int main() {
int N;
printf("请输入班级人数:");
scanf("%d", &N);
srand(time(0)); // 设置随机种子保证每次结果不同
double probability = birthday_problem(N);
printf("当班级有%d人时,至少有两人同生日的概率约为%.2f%%\n", N, probability * 100);
return 0;
}
```
当你运行这个程序,它会提示你输入班级人数,然后计算并输出相应的概率。需要注意的是,这个概率是通过多次随机试验得到的近似值,因为真实概率的计算涉及到复杂的数学理论。
阅读全文