夺冠概率 蓝桥杯

来源:互联网 发布:慢动作视频软件 编辑:程序博客网 时间:2024/04/30 18:31
题目:

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

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


              甲      乙     丙     丁
        甲    –     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.0    0.1    0.3    0.5
   乙    0.9    1.0    0.7    0.4
   丙    0.7    0.3    1.0    0.2
   丁    0.5    0.6    0.8    1.0

 三个结果:
 1.初赛:甲->乙  丙->丁    决赛:甲->丙/甲->丁
 2.初赛:甲->丙  乙->丁    决赛:甲->乙/甲->丁
 3.初赛:甲->丁  乙->丙    决赛:甲->乙/甲->丙
 

假设三种情况甲都获胜:
 p1=a[0][1]*(a[2][3]*a[0][2]+a[3][2]*a[0][3]); //甲赢了乙,(丙赢了丁,甲与丙比赛/丁赢了丙,甲与丙比赛)
 p2=a[0][2]*(a[1][3]*a[0][1]+a[3][1]*a[0][3]); //甲赢了丙,(乙赢了丁,甲与乙比赛/丁赢了乙,甲与丁比赛)
 p3=a[0][3]*(a[1][2]*a[0][1]+a[2][1]*a[0][2]); //甲赢了丁,(乙赢了丙,甲与乙比赛/丙赢了乙,甲与丙比赛)


理想下,每种情况都有1/3种可能,所以最后结果在: 1.0/3*(p1+p2+p3)≈0.075999 左右



public class DuoGuan {final static int N=10000;double[][] a={{1.0,0.1,0.3,0.5}, {0.9,1.0,0.7,0.4}, {0.7,0.3,1.0,0.2}, {0.5,0.6,0.8,1.0}};public double suiji(int n){double p=0;switch(n){case 1:p=a[0][1]*(a[2][3]*a[0][2]+a[3][2]*a[0][3]);break;case 2:p=a[0][2]*(a[1][3]*a[0][1]+a[3][1]*a[0][3]);break;case 3:p=a[0][3]*(a[1][2]*a[0][1]+a[2][1]*a[0][2]);break;}return p;}public static void main(String[] args) {// TODO 自动生成的方法存根double sum=0;DuoGuan sj=new DuoGuan();for(int i=0;i<N;i++){int n=(int) (Math.random()*10%3+1);//System.out.println(n);sum+=sj.suiji(n);}System.out.println(sum/N);}}


0 0
原创粉丝点击