用c语言代码求生日悖论问题
时间: 2024-09-15 13:09:35 浏览: 57
求10的阶乘的C语言代码
在C语言中,我们通常不会直接编写函数来求解生日悖论问题,因为这涉及到复杂的数学计算和循环结构。然而,我们可以创建一个简单的程序来模拟这个过程并估算概率。这里是一个简化的示例,用于估计n个人中至少有两个相同生日的随机样本平均值:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_STUDENTS 365
#define NUM_SAMPLES 10000
int count_same_birthdays(int n) {
int* birthdays = malloc(n * sizeof(int));
for (int i = 0; i < n; i++) {
birthdays[i] = rand() % MAX_STUDENTS;
}
int same_days_count = 0;
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if (birthdays[i] == birthdays[j]) {
same_days_count++;
break;
}
}
}
free(birthdays);
return same_days_count;
}
double estimate_probability(int n) {
double total_same_days = 0;
for (int i = 0; i < NUM_SAMPLES; i++) {
total_same_days += count_same_birthdays(n);
}
return (double)total_same_days / NUM_SAMPLES;
}
int main() {
srand(time(0)); // 初始化随机种子
int n_people = 23; // 选择一个示例值,比如计算23人中至少有两人同一天生日的概率
printf("Probability of at least one shared birthday among %d people: %.2f%%\n",
n_people, estimate_probability(n_people) * 100);
return 0;
}
```
运行此程序会输出大约23人中有至少一人与他人共享生日的概率。注意这只是一个估算,并非精确的计算结果。如果你需要更准确的概率,可以调整`NUM_SAMPLES`的值以增加采样次数。
阅读全文