solution.md 3.0 KB
Newer Older
每日一练社区's avatar
每日一练社区 已提交
1
# 夺冠概率
F
fix bug  
feilong 已提交
2

每日一练社区's avatar
每日一练社区 已提交
3 4 5
足球比赛具有一定程度的偶然性,弱队也有战胜强队的可能。

假设有甲、乙、丙、丁四个球队。根据他们过去比赛的成绩,得出每个队与另一个队对阵时取胜的概率表:
每日一练社区's avatar
每日一练社区 已提交
6

每日一练社区's avatar
每日一练社区 已提交
7 8 9 10 11 12 13
```
    甲   乙  丙  丁   
甲   -  0.1 0.3 0.5
乙 0.9  -   0.7 0.4 
丙 0.7  0.3 -   0.2
丁 0.5  0.6 0.8 -
```
每日一练社区's avatar
每日一练社区 已提交
14

每日一练社区's avatar
每日一练社区 已提交
15 16 17 18 19 20 21 22
数据含义:甲对乙的取胜概率为0.1,丙对乙的胜率为0.3,...

现在要举行一次锦标赛。双方抽签,分两个组比,获胜的两个队再争夺冠军。

![](https://img-blog.csdn.net/20150228234310457?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd3IxMzI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)

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

每日一练社区's avatar
每日一练社区 已提交
23
以下选项<span style="color:red">错误</span>的是?
每日一练社区's avatar
每日一练社区 已提交
24 25

## aop
F
fix bug  
feilong 已提交
26

每日一练社区's avatar
每日一练社区 已提交
27
### before
F
fix bug  
feilong 已提交
28

每日一练社区's avatar
每日一练社区 已提交
29
```cpp
每日一练社区's avatar
每日一练社区 已提交
30
#include <bits/stdc++.h>
每日一练社区's avatar
每日一练社区 已提交
31 32
using namespace std;
```
每日一练社区's avatar
每日一练社区 已提交
33

每日一练社区's avatar
每日一练社区 已提交
34
### after
F
fix bug  
feilong 已提交
35

每日一练社区's avatar
每日一练社区 已提交
36 37 38 39 40
```cpp

```

## 答案
F
fix bug  
feilong 已提交
41

每日一练社区's avatar
每日一练社区 已提交
42 43 44
```cpp
int main()
{
每日一练社区's avatar
每日一练社区 已提交
45 46 47 48 49 50 51 52 53 54 55
    float a[4][4] = {0, 0.1, 0.3, 0.5, 0.9, 0, 0.7, 0.4, 0.7, 0.3, 0, 0.2, 0.5, 0.6, 0.8, 0};
    float p[3];

    p[0] = a[0][1] * (a[2][3] * a[0][2] + a[3][2] * a[0][3]);

    p[1] = a[0][2] * (a[1][3] * a[0][1] + a[3][1] * a[0][3]);

    p[2] = a[0][3] * (a[1][2] * a[0][1] + a[2][1] * a[0][2]);
    srand(time(0));
    float sum = 0;
    for (int i = 0; i < 10000; i++)
每日一练社区's avatar
每日一练社区 已提交
56
    {
每日一练社区's avatar
每日一练社区 已提交
57 58
        int r = rand() / 3;
        sum += p[r];
每日一练社区's avatar
每日一练社区 已提交
59
    }
每日一练社区's avatar
每日一练社区 已提交
60 61
    float pi = sum / 10000;
    cout << pi << endl;
每日一练社区's avatar
每日一练社区 已提交
62 63 64 65
}
```
## 选项

F
fix bug  
feilong 已提交
66

每日一练社区's avatar
每日一练社区 已提交
67
### A
F
fix bug  
feilong 已提交
68

每日一练社区's avatar
每日一练社区 已提交
69 70 71
```cpp
int main()
{
每日一练社区's avatar
每日一练社区 已提交
72 73 74 75 76 77 78 79 80 81 82
    int i, j;
    double a[4][4] = {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};
    double p[3], sum = 0.0;
    p[0] = a[0][1] * (a[2][3] * a[0][2] + a[3][2] * a[0][3]);
    p[1] = a[0][2] * (a[1][3] * a[0][1] + a[3][1] * a[0][3]);
    p[2] = a[0][3] * (a[1][2] * a[0][1] + a[2][1] * a[0][2]);
    srand(time(0));
    for (i = 0; i < 100000; i++)
每日一练社区's avatar
每日一练社区 已提交
83
    {
每日一练社区's avatar
每日一练社区 已提交
84 85
        j = rand() % 3;
        sum += p[j];
每日一练社区's avatar
每日一练社区 已提交
86
    }
每日一练社区's avatar
每日一练社区 已提交
87 88
    sum /= 100000;
    printf("%lf\n", sum);
每日一练社区's avatar
每日一练社区 已提交
89 90 91 92 93
    return 0;
}
```

### B
F
fix bug  
feilong 已提交
94

每日一练社区's avatar
每日一练社区 已提交
95
```cpp
每日一练社区's avatar
每日一练社区 已提交
96
double p[3];
每日一练社区's avatar
每日一练社区 已提交
97 98
int main()
{
每日一练社区's avatar
每日一练社区 已提交
99 100 101 102 103 104 105 106 107

    p[0] = 0.1 * 0.8 * 0.5 + 0.1 * 0.2 * 0.3;
    p[1] = 0.3 * 0.6 * 0.5 + 0.3 * 0.4 * 0.1;
    p[2] = 0.5 * 0.7 * 0.1 + 0.5 * 0.3 * 0.3;

    double sum = 0;

    srand(time(NULL));
    for (int i = 1; i <= 100000; i++)
每日一练社区's avatar
每日一练社区 已提交
108
    {
每日一练社区's avatar
每日一练社区 已提交
109 110
        int r = rand() % 3;
        sum += p[r];
每日一练社区's avatar
每日一练社区 已提交
111
    }
每日一练社区's avatar
每日一练社区 已提交
112
    printf("%f\n", sum / 100000);
每日一练社区's avatar
每日一练社区 已提交
113 114 115 116 117
    return 0;
}
```

### C
F
fix bug  
feilong 已提交
118

每日一练社区's avatar
每日一练社区 已提交
119
```cpp
每日一练社区's avatar
每日一练社区 已提交
120 121 122 123 124 125
double rate[4][4] = {
    {0, 0.1, 0.3, 0.5},
    {0.9, 0, 0.7, 0.4},
    {0.7, 0.3, 0, 0.2},
    {0.5, 0.6, 0.8, 0}};

每日一练社区's avatar
每日一练社区 已提交
126 127 128 129 130 131 132 133 134 135 136 137 138 139
int main()
{
    int i, j, k;
    double time, sum;
    time = 0;
    sum = 0;
    for (i = 1; i < 4; i++)
    {
        for (j = 1; j < 4; j++)
        {
            for (k = 1; k < 4; k++)
            {
                if (j != i && k != i && j != k)
                {
每日一练社区's avatar
每日一练社区 已提交
140
                    sum += rate[0][i] * rate[j][k] * rate[0][j];
每日一练社区's avatar
每日一练社区 已提交
141 142 143 144 145 146 147 148 149
                }
            }
        }
        time++;
    }
    cout << sum / time;
    return 0;
}
```