生日不相同的概率
2017-03-13 20:58
260 查看
假设我们班有50名同学,每个同学都报出自己的生日,
每个同学的生日都不相重的概率只有0.0296,如果有100个同学,不相重的概率为3.0725´10-7。相重复的概率如此之大与我们主观想象不同。编写程序,输入同学的人数n,计算出其生日不重复的概率。然后在用仿真的方法,
利用随机数产生每个同学的生日,计算出生日不重复的概率并与前面的结果进行比较。
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
struct shengri
{
int mon;
int da;
}sr[100]; //结构体来存储生日
int main()
{
int n1,k,flag=0;
double cnt=0;
double ans=1,a=0.0;
cin>>n1;
for(int i=0;i<n1;i++)
{
ans=ans*((365.0-a)/365.0); //计算理论概率
a=a+1.0;
}
cout<<ans<<endl;
srand((unsigned)time(0));
for(int mi=0;mi<25000;mi++) //共模拟25000次
{
flag=0;
for(k=0;k<n1;k++)
{
sr[k].mon=rand()%12+1;
sr[k].da=rand()%31+1; //生成随机模拟生日
}
for(int l=0;l<k-1;l++)
{
for(int c=l+1;c<k;c++)
{
if(sr[l].mon!=sr[c].mon || sr[l].da!=sr[c].da)
{
flag++;
}
}
}
if(flag==((k*(k-1))/2))
{
cnt++;
}
}
每个同学的生日都不相重的概率只有0.0296,如果有100个同学,不相重的概率为3.0725´10-7。相重复的概率如此之大与我们主观想象不同。编写程序,输入同学的人数n,计算出其生日不重复的概率。然后在用仿真的方法,
利用随机数产生每个同学的生日,计算出生日不重复的概率并与前面的结果进行比较。
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
struct shengri
{
int mon;
int da;
}sr[100]; //结构体来存储生日
int main()
{
int n1,k,flag=0;
double cnt=0;
double ans=1,a=0.0;
cin>>n1;
for(int i=0;i<n1;i++)
{
ans=ans*((365.0-a)/365.0); //计算理论概率
a=a+1.0;
}
cout<<ans<<endl;
srand((unsigned)time(0));
for(int mi=0;mi<25000;mi++) //共模拟25000次
{
flag=0;
for(k=0;k<n1;k++)
{
sr[k].mon=rand()%12+1;
sr[k].da=rand()%31+1; //生成随机模拟生日
}
for(int l=0;l<k-1;l++)
{
for(int c=l+1;c<k;c++)
{
if(sr[l].mon!=sr[c].mon || sr[l].da!=sr[c].da)
{
flag++;
}
}
}
if(flag==((k*(k-1))/2))
{
cnt++;
}
}
cnt=cnt/25000; cout<<cnt<<endl; return 0; }
相关文章推荐
- 腾讯面试题:50个人至少有两个人生日相同的概率
- 求一百个人中有人生日相同的概率
- 生日相同的概率
- 相同生日概率(经典问题)
- 两人生日相同的概率
- n个人中至少有两个人生日相同的概率
- 求n个人中,生日相同的概率(Java集合框架之HashSet的用法)
- 50个人中有相同生日的概率是97%
- 算生日相同的概率
- 蓝桥杯-生日相同的概率
- 50个人中有相同生日的概率(考虑闰年)
- n个人中至少有两个人生日相同的概率
- 概率(1)---生日问题
- 6377:生日相同 2.0 题解
- c#获取相同概率随机数
- 生日相同
- LightOj 1104 - Birthday Paradox(生日悖论概率)
- 趣题:随机选取两个无穷大的图,求两者相同的概率
- 程序员面试金典——解题总结: 9.18高难度题 18.3编写一个方法,从大小为n的数组中随机选出m个整数。要求每个元素被选中的概率相同。
- 生日概率问题