小红和小紫的拿球游戏(B组)
链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
在一个箱子中,有aaa个红球和bbb个紫球,小红和小紫轮流取球,小红先手,每轮必须恰好取走一个球,共取a+ba+ba+b轮后游戏结束。
小红希望第一次取的球的颜色和最后一次相同,小紫希望第一次取的球的颜色和最后一次不同。但小红戴了一个特殊的透视眼镜,她可以看到箱子内部球的颜色,因此每次可以取到她想取的颜色;而小紫每次则是在剩余的球中随机取一个。小红想知道,若自己采用最优的策略,最终自己获胜的概率是多少?
输入描述:
第一行输入一个正整数ttt,表示有ttt组测试数据。 接下来ttt行,每一行输入两个正整数a,ba,ba,b,用空格隔开。 1≤t≤201 \leq t \leq 201≤t≤20 1≤a,b≤1001\leq a,b \leq 1001≤a,b≤100
输出描述:
每组数据一个浮点数,代表小红获胜的概率。如果你的答案和标准答案的相对误差不超过10−610^{-6}10−6,则认为你的答案正确。
示例1
输入
复制1 2 1
1 2 1
输出
复制0.5
0.5
说明
小红先拿一个红球,这样小紫有 50% 的概率取到剩余的一个红球,有 50% 的概率取到剩余的一个紫球。如果小紫取到了紫球则小红胜利,否则小红失败。
示例2
输入
复制1 1 1
1 1 1
输出
复制0.0
0.0
说明
无论小红拿紫球还是红球,都是必败。
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
// 注意 while 处理多个 case
int t= in.nextInt();
while(t-->0){
int a=in.nextInt();
int b=in.nextInt();
double ans=1.0;
int p=Math.max(a,b);
int q=Math.min(a,b);
if(p-q>=2) System.out.println(1);
else{
p--;
while(p>0&&q>0){
ans=ans*p/(q+p);
p--;
q--;
}
System.out.println(1.0-ans);
}
}
}
}