随机算法编程实现计算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