第二届蓝桥杯省赛---夺冠概率

  1. 夺冠概率

    足球比赛具有一定程度的偶然性,弱队也有战胜强队的可能。
    假设有甲、乙、丙、丁四个球队。根据他们过去比赛的成绩,得出每个队与另一个队对阵时取胜的概率表:

        甲 乙 丙 丁
    甲 - 0.1 0.3 0.5
    乙 0.9 - 0.7 0.4
    丙 0.7 0.3 - 0.2
    丁 0.5 0.6 0.8 -

    数据含义:甲对乙的取胜概率为0.1,丙对乙的胜率为0.3,...
    现在要举行一次锦标赛。双方抽签,分两个组比,获胜的两个队再争夺冠军。(参见【1.jpg】)


请你进行10万次模拟,计算出甲队夺冠的概率。

思路:题目给出了甲乙丙丁相互之间竞争取胜的各自的概率。现在要求模拟10万次比赛,求出甲队夺冠的概率,甲获胜比赛安排的类型是有限的。如下图:#

分析:一共有这三种情况,三种情况甲得冠的概率可以分别求出来,这三种概率相加就是甲得冠的理论概率(这个值是恒定的,因为这三种情况出现的概率都是1/3),

但是题目让模拟十万次,所以每一次的概率是不相同的,非常接近1/3,我们可以使用rand()函数随机获取0~2这三个数,用来体现着三种情况的随机性,十万次的概率相加,

用总和除以十万就是答案。。。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<ctime>
 4 #include<cstring>
 5 using namespace std;
 6 
 7 const int maxn = 1e5;
 8 double t[3];
 9 
10 int main(){
11     /*三种情况的概率*/
12     t[0] = 0.1*0.8*0.5+0.1*0.2*0.3;
13     t[1] = 0.3*0.6*0.5+0.3*.4*0.2;
14     t[2] = 0.5*0.7*0.1+0.5*0.3*0.3;
15     double sum=0;
16     srand(time(NULL));
17     for( int i=0; i<maxn; i++ ){
18         sum+=t[rand()%3];
19     }
20     printf("%f
",sum/maxn);
21     return 0;
22 }
有些目标看似很遥远,但只要付出足够多的努力,这一切总有可能实现!
原文地址:https://www.cnblogs.com/Bravewtz/p/10424150.html