作业帮 > 数学 > 作业

acm 概率计算描述A和B两个人参加一场答题比赛.比赛的过程大概是A和B两个人轮流答题,A先答.一旦某人没有正确回答问题

来源:学生作业帮 编辑:作业帮 分类:数学作业 时间:2024/07/13 17:21:59
acm 概率计算
描述
A和B两个人参加一场答题比赛.比赛的过程大概是A和B两个人轮流答题,A先答.一旦某人没有正确回答问题,则对手立即获胜.
所以,两个人比赛的时候在一定程度上靠的是运气,希望自己晚点碰到不会的题目,而对手早点碰到不会的题目.
为了简化问题,我们假设A答对问题的概率为a%,B答对问题的概率为b%,请问最后A、B获得比赛胜利的概率各为多少?
输入
先输入一个整数T,表示有T组测试数据.
接下来T行,每行输入两个整数a,b,表示A,B获胜的概率分别为a%和b%,其中0
A赢的概率是
a * (100 - b) / (10000 - a * b)

B赢的概率是
100 * (100 - a) / (10000 - a * b)
 

假设A赢的概率是P
A在第一轮直接取胜的概率是
P1 = (a / 100) * (1 - b / 100)

第一轮AB两人都回答正确的概率是
P2 = (a / 100) * (b / 100) = a * b / 10000
此时第二轮将重新回到开始的时候的状态,所以概率上有以下的关系
P = P1 + P2 * P

P = P1 / ( 1 - P2)
 = (a / 100) * (1 - b / 100) / (1 - a * b / 10000 )
 = a * (100 - b) / (10000 - a * b)
再问: 能说一下原因吗?
再答: 哪一步没有看懂?#include <stdio.h>

int greatest_common_divisor(int a, int b) {
\x09int c;
\x09while (b != 0) {
\x09\x09c = a % b;
\x09\x09a = b;
\x09\x09b = c;
\x09}
\x09return a;
}

int main() {
\x09int a, b;
\x09int pafenzi, pafenmu, pbfenzi, pbfenmu;
\x09int t;
\x09scanf("%d", &t);
\x09while (t--) {
\x09\x09scanf("%d%d", &a, &b);
\x09\x09pafenzi = a * (100 - b);
\x09\x09pafenmu = 10000 - a * b;
\x09\x09pbfenzi = 100 * (100 - a);
\x09\x09pbfenmu = pafenmu;
\x09\x09a = greatest_common_divisor(pafenmu, pafenzi);
\x09\x09b = greatest_common_divisor(pbfenmu, pbfenzi);
\x09\x09printf("%d/%d %d/%d\n", pafenzi / a, pafenmu / a, pbfenzi / b, pbfenmu / b);
\x09}
}
再问: p=p1+p2*p为什么等于p1/(1—p2)
再答: 假设最终A获胜的概率是P
我们看第一轮的比赛,A可能直接输掉,概率是P_输 = 1 - a / 100A可能直接赢了P_赢 = a / 100 * (1 - b / 100)剩下的结果就是这轮白玩了,等于重新开始游戏,此时A获胜的概率仍然应该是P
那么就有P = P_赢 + (1 - P_输 - P_赢) * P                p = p1 + p2 * p
=>  (1 - p2) * p = p1
=>             p = p1 / (1 - p2)