夺冠概率
足球比赛具有一定程度的偶然性,弱队也有战胜强队的可能。
假设有甲、乙、丙、丁四个球队。根据他们过去比赛的成绩,得出每个队与另一个队对阵时取胜的概率表:
甲 乙 丙 丁
甲 - 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>View Code
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\n",count*1.0/100000);
44 return 0;
45 }