n人生日不重复概率的计算与仿真

上机作业

(1) 假设我们班有50名同学,每个同学都报出自己的生日, 每个同学的生日都不相重的概率只有0.0296,如果有100个同学,不相重的概率为3.0725´10-7。相重复的概率如此之大与我们主观想象不同。写一个程序,输入同学的人数n计算出其生日不重复的概率。然后在用彷真的方法, 利用随机数产生每个同学的生日,计算出生日不重复的概率并与前面的结果进行比较。

[学生的生日可以用随机数产生,rand()产生0—32767之间的伪随机数,因为此需要一个种子,种子不同产生的随机数列不同,rand()产生的随机数也不同,可以调用srand(long
int *)函数设置种子,比如我们可以获得计算机中的时间获得随机数种子, 以上函数需要包含头文件 stdlib.h]



#include "iostream"
using namespace std;
#include <math.h>
#include<ctime>
#include<stdlib.h>
bool flag;
double caculate(int, bool);
double model(int, bool);
int main()
{
    int n;
    cout<< "intput the number" << endl;
    cin>> n;
    cout<< "是否为闰年?y/n" << endl;
    getchar();
    if (getchar() == 'y') flag = 1;
    else flag = 0;
    cout<< "计算的值" << caculate(n, flag) << endl;
    cout<< "模拟的值" << model(n, flag);
    return 0;
}
double caculate(int num, bool flag)
{
    int day;//是否为闰年,看总天数
    double result = 1, i;//计算的重复概率
    if (flag) day = 366;
    else day = 365;
    for (i = 1; i <num; i++)
    {
       result*= (day - i) / day;//两个人不在同一天就是(365/365)*(364/365)
    }
     return result;
}
double model(int num, bool flag)
{
    int day;//是否为闰年,看总天数
    double result;//仿真的重复概率
    int cont = 0, i, j = 0;//模拟中不重复的次数
    if (flag) day = 366;
    else day = 365;
    rand((int)time(0));
    for (j = 0; j <1000000; j++) 
    {
       int* p = new int[day+1];  //下标表示天数
       for (i = 0; i < day;i++)
          p[i]= 0;//清零数组
        for (i = 1; i <num; i++)
       {
          int n;
          n= rand() % day + 1;
          if (!p[n])
               p[n]= 1;
          else
               break;
        }
          if (i == num) cont++;  //num为班级人数
         delete[]p;
 }
   result= cont * 1.0 / 1000000;//数字越大越精确
   return result;
}


  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值