28个人中至少有两个人同一天生日的概率 C语言
时间: 2024-09-08 09:02:44 浏览: 41
要计算28个人中至少有两个人同一天生日的概率,首先需要了解概率论中的“生日悖论”(Birthday Paradox)。生日悖论是一个概率问题,它指出在一个房间里,只要有23个人,那么至少有两个人生日相同的概率就会超过50%。对于28个人,这个概率会更高。
具体到C语言编程实现,我们可以使用以下思路进行模拟:
1. 用一个数组来表示一年的365天(假设不考虑闰年),数组的索引代表日期,数组的值初始为0,表示这一天还没有人出生。
2. 随机生成每个人的生日,并在对应的数组位置上加1。如果生成的生日位置的值已经大于0,则表示至少有两个人生日相同,此时可以停止模拟,并记录这种情况。
3. 重复以上步骤多次(比如100万次),以获得至少有两个人生日相同的概率。
下面是一个使用C语言实现的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define DAYS 365
#define NUM_PEOPLE 28
#define SIMULATIONS 1000000
int main() {
int birthdays[DAYS] = {0};
int sameBirthdays;
int i, j;
// 初始化随机数发生器
srand(time(NULL));
sameBirthdays = 0;
for (i = 0; i < SIMULATIONS; i++) {
// 重置生日数组
for (j = 0; j < DAYS; j++) {
birthdays[j] = 0;
}
// 为每个人随机分配生日
for (j = 0; j < NUM_PEOPLE; j++) {
int birthday = rand() % DAYS;
if (birthdays[birthday]++ > 0) {
// 发现至少两个人生日相同
sameBirthdays++;
break;
}
}
}
// 计算至少两个人生日相同的概率
printf("在%d个人中,至少两个人同一天生日的概率为: %.2f%%\n",
NUM_PEOPLE, (float)sameBirthdays / SIMULATIONS * 100);
return 0;
}
```
在这个代码中,我们通过模拟大量次数(SIMULATIONS)来估算概率。每次模拟都重置生日数组,然后为28个人随机分配生日,如果发现有重复的生日,则增加sameBirthdays计数器。最后,输出至少有两个人生日相同的概率。