題目描述
A和B兩個人參加一場答題比賽。比賽的過程大概是A和B兩個人輪流答題,A先答。一旦某人沒有正确回答問題,則對手立即獲勝。
是以,兩個人比賽的時候在一定程度上靠的是運氣,希望自己晚點碰到不會的題目,而對手早點碰到不會的題目。
為了簡化問題,我們假設A答對問題的機率為a%, B答對問題的機率為b%,請問最後A、B獲得比賽勝利的機率各為多少?
輸入
先輸入一個整數T,表示有T組測試資料。
接下來T行,每行輸入兩個整數a,b,表示A,B獲勝的機率分别為a%和b%,其中0 <= a,b <= 100, ab < 10000。
輸出
每組測試資料輸出一行,分别為A和B最終獲勝的機率,中間用1個空格隔開。機率請以最簡分數x/y的形式表示(注意即使y為1,也要寫成x/1的形式)。詳細輸出見樣例。
樣例輸入
2
100 0
50 50
樣例輸出
1/1 0/1
1/3 2/3
分析:
無論怎樣比都是一局定勝負的。我們隻需要看一局的勝負即可,如果A最終獲勝的機率為PA,那麼A失敗的機率為(1-PA),如果A失敗那麼B一定獲勝。B獲勝的機率即為A失敗的機率。
每一局隻有三種情況A獲勝,平局,B獲勝。A最終獲勝的機率為,A獲勝的機率 X B失敗的機率=a%*(1-b%);平局的機率為:A獲勝的機率 X B獲勝的機率=a%*b%;考慮到答題順序,B最終獲勝的機率直接為A最終失敗的機率:(1-a%);由于我們輸出的結果中是不能包括平局機率的,是以 s%=1-a%*b%。即pa=(a%*(1-b%))/s%,pb=(1-pa)/%s;
#include<stdio.h>
int pa,pb,a,b,n,s;
int gcd(int c,int d)
{
return d==0?c:gcd(d,c%d);
}
int main(){
scanf("%d",&n);
while(n--)
{
scanf("%d%d",&pa,&pb);
if(!pa&&pb)
{
printf("0/1 1/1\n");
}
else if(pa&&!pb)
{
printf("1/1 0/1\n");
}
else if(!pa&&!pb)
{
printf("0/1 0/1\n");
}
else
{
a=pa*(100-pb);
s=10000-pa*pb;
b=s-a;
printf("%d/%d %d/%d\n",a/gcd(s,a),(a+b)/gcd(s,a),b/gcd(s,b),(a+b)/gcd(s,b));
}
}
}