小红和小紫的拿球游戏(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);
            }
        }
            
        
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值