题目:有16支球队,并且知道他们两两比赛的输赢概率,问最后每个球队获得冠军的概率。
分析:数学题。数据较小,这里利用递归求解。
说明:注意输出格式。
#include <stdio.h>
#include <stdlib.h>
char countries[16][11];
double matrix[16][16];
double dfs(int k, int l, int r)
{
if (l == r) {
return 1.0;
}
double p, ans = 0.0;
if (k <= (r+l)/2) {
p = dfs(k, l, (r+l)/2);
for (int i = (r+l)/2+1; i <= r; ++ i) {
ans += dfs(i, (r+l)/2+1, r) * matrix[k][i];
}
}else {
p = dfs(k, (r+l)/2+1, r);
for (int i = l; i <= (r+l)/2; ++ i) {
ans += dfs(i, l, (r+l)/2) * matrix[k][i];
}
}
return ans * p;
}
int main()
{
for (int i = 0; i < 16; ++ i) {
scanf("%s",countries[i]);
}
for (int i = 0; i < 16; ++ i) {
for (int j = 0; j < 16; ++ j) {
scanf("%lf",&matrix[i][j]);
matrix[i][j] /= 100.0;
}
}
for (int i = 0; i < 16; ++ i) {
printf("%-10s p=%.2lf%%\n", countries[i], 100.0*dfs(i, 0, 15));
}
return 0;
}