统计同一天生日

蒙特卡罗方法 -- 统计一个班级有同一天生日的同学概率
一个班有多少同学才能,至少有两个人 同一天过生日 (一年中的某天,不特指同年) 的概率>=50%.
分析
假设一个班有 N 个人 ,让每班人数 N 10 人开始到 80 人观察同日生机率的变化 每次模拟 10000 个班,看有多少个有同一天生日的班,计算频率

#include<stdio.h>

#include<time.h>

#include<stdlib.h>

int HaveSameBirthday (int stu[] ,int n)

{

    int same=0;

    for (int i = 0; i < 367 ; i++)

    {   if (stu[i]>2)

            same=1;

    }

    return same;

}

int main()

{

    srand((unsigned)time(NULL));

    int stu[367],n,N=10000,d,havesame=0,same;

    float probability;

    for (int n = 10; n < 81; n++)

    {   for (int i = 0; i < N; i++)

        {  

            for (int i = 0; i < 367; i++)

                stu[i]=0;

            for (int j = 0; j < n; j++)

            {

                d=rand()%366+1;

                stu[d]++;

            }

            same=HaveSameBirthday(stu,n);

            havesame+=same;

        }

        probability=havesame/100;

       

        if(probability>50)

        {

            printf("一个班有%d同学才能,至少有两个人同一天过生日的概率>=50%c\n",n,'%');break;

        }

    }    

   

    system("pause");

    return 0;

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值