# 夺冠概率
足球比赛具有一定程度的偶然性,弱队也有战胜强队的可能。
假设有甲、乙、丙、丁四个球队。根据他们过去比赛的成绩,得出每个队与另一个队对阵时取胜的概率表:
```
甲 乙 丙 丁
甲 - 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,...
现在要举行一次锦标赛。双方抽签,分两个组比,获胜的两个队再争夺冠军。
![](https://img-blog.csdn.net/20150228234310457?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd3IxMzI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
请你进行10万次模拟,计算出甲队夺冠的概率。
以下选项错误的是?
## aop
### before
```cpp
#include
using namespace std;
```
### after
```cpp
```
## 答案
```cpp
int main()
{
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++)
{
int r = rand() / 3;
sum += p[r];
}
float pi = sum / 10000;
cout << pi << endl;
}
```
## 选项
### A
```cpp
int main()
{
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++)
{
j = rand() % 3;
sum += p[j];
}
sum /= 100000;
printf("%lf\n", sum);
return 0;
}
```
### B
```cpp
double p[3];
int main()
{
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++)
{
int r = rand() % 3;
sum += p[r];
}
printf("%f\n", sum / 100000);
return 0;
}
```
### C
```cpp
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}};
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)
{
sum += rate[0][i] * rate[j][k] * rate[0][j];
}
}
}
time++;
}
cout << sum / time;
return 0;
}
```