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