编程实现25个人生日各不相同的概率

本文通过编程实现计算25个人生日各不相同的概率,利用365!/(340!* 365^25)公式,并采用蒙特卡洛算法进行300次随机实验,探讨至少一对生日相同的情况,同时计算平均值和方差。
摘要由CSDN通过智能技术生成

随机算法编程实现计算365!/340!365^25。

问题描述:

这个式子的计算最早源于***生日问题***的计算。实际上这个式子是***计算25个人中至少有一对生日相同的概率***。

编程实现:

1.计算至少有一对生日相同的概率。即概率算法计算 1-(365!/(340!* 365^25 ))
2.1对,2对,3对生日相同的概率
3.输出300次实验结果的平均值和方差 。

在这里,我们采用的核心算法思想是mente carlo算法,只采用了300次随机试验,当然随机模拟的次数越多模拟出的结果越精确。
算法中的函数caculate()也给出了直接计算所有人生日都不相同的概率的精确值。

程序代码:

/*1.计算至少有一对生日相同的概率即概率算法计算 1-(365!/(340!* 365^25 )) 
  2.1~3对生日相同的概率  
  3.输出300次实验结果的平均值和方差 
*/

#include <iostream>
using namespace std;
#include <math.h>
#include<ctime>
#include<stdlib.h>
#include <iomanip>  //有效数字
double caculate(int);
int model(int);
int model_1(int);
int main()
{
   
    int n;
    
    cout<< "请输入总人数:" << endl;
    cin>> n;
    cout<< "所有人生日都不相同的概率:" <<endl;
    cout<< "计算的精确值:" <<caculate(n) << endl;
    model(n);
    model_1(n);
    return 0;
}

//计算精确值 
double caculate(int num)
{
   
    int day=365;
    double result = 1, i;//计算的重复概率
    for (i = 1; i <num; i
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值