蓝桥杯 夺冠概率

夺冠概率

    足球比赛具有一定程度的偶然性,弱队也有战胜强队的可能。

    假设有甲、乙、丙、丁四个球队。根据他们过去比赛的成绩,得出每个队与另一个队对阵时取胜的概率表:

    甲  乙  丙  丁   

甲   -  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万次模拟,计算出甲队夺冠的概率。

 

分析:这是一道模拟题,可以通过随机函数模拟这场比赛,然后计算结果,当做其夺得冠军的概率。

贴上代码:

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<time.h>
 4 int pk[4][4] = {
 5                 {0,1,3,5},
 6                         {9,0,7,4},
 7                 {7,3,0,2},
 8                 {5,6,8,0}
 9                       };
10 int main()
11 {
12     int i,a,a1,b,b1,k,count=0;
13     
14     srand(time(NULL));
15 
16     for(i=0;i<100000;i++){
17         a1 = rand()%3 + 1 ;//随机选出a的对手
18         if(rand()%10<pk[0][a1]){//当第一场半比赛a胜时 
19             switch(a1){
20             case 1:
21                 b = 2 ;
22                 b1 = 3 ;
23                 break;
24             case 2:
25                 b = 1 ;
26                 b1 = 3 ;
27                 break;
28             default:
29                 b = 1 ; 
30                 b1 = 2 ;
31             }
32             if(rand()%10<pk[b][b1]){//当第二场半比赛b胜时 
33                 a1 = b ;
34             }
35             else{//当第二场半决赛比赛b1胜时 
36                 a1 = b1 ;            
37             }
38             if(rand()%10<pk[0][a1]){//当最后总决赛a胜时 
39                 count++;//a当总决赛冠军的次数加一 
40             }
41         }
42     }
43     printf("%f
",count*1.0/100000);
44     return 0;
45 }
View Code
原文地址:https://www.cnblogs.com/bokezhilu/p/3616597.html