下面是用C++去实现组合数,完成这个概率论问题。问题来源于我女朋友和我的闲谈,我还把问题理解错了,才有如下想法产生。
以下代码仅个人参考,如有问题,请指教:
#include<bits/stdc++.h>
using namespace std;
int main() {
double win=0;
int num=10;
double C_sum=1,A_sum=1;
for(int i=5;i<=num;i++){
C_sum=1.0,A_sum=1.0;
for(int j=i;j>=1;j--){
C_sum=C_sum*j;
A_sum=A_sum*(num-j+1);//实现组合数
}
cout<<A_sum<<" "<<C_sum<<endl;
cout<<"i "<<i<<" "<<"A_sum/C_sum "<<A_sum/C_sum<<endl;
//计算概率问题
cout<<"each win "<<(A_sum*1.0/C_sum)*pow(0.53,i)*pow(0.47,num-i)<<endl;
win+=(A_sum*1.0/C_sum)*pow(0.53,i)*pow(0.47,num-i);
}
cout<<"last"<<win<<endl;//输出结果
// cout<<"all "<<win_00+win_10+win_11<<endl;
return 0;
}
因为十个硬币,其不败的几率就是正面出现个数不少于5个,所以就用比较基础的方法去实现。个人自行实现,如有相同之处,纯属雷同。
如下输出 i 为正面出现硬币个数,然后为组合数的计算结果
each win记录在该情况下的概率。