天天看點

NYOJ-機率計算(機率)

題目描述

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));
		}
	}
}