爱奇艺java笔试题详解_爱奇艺2020届Java后端开发笔试编程题第二题

import java.util.*;

public class Main {

private static Double tp = 0.0;

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

Double red = sc.nextDouble();

Double blue = sc.nextDouble();

Double sum = red + blue;

Double totalP = 1.0;

helper(sum, totalP, red, blue, 0, 3, false);

System.out.println(tp);

}

//  这道题只有当A拿到红色的时候 flag 才会等于true.

public static void helper(double sum,  double totalP, double red, double blue, int role, int sequence, boolean flag) {

if(flag) {

tp += totalP;

return ;

}

if(role % 3 == 0 ) {

// 只有A选择红球 直接获胜

double temp = totalP;

if(red > 0) {

helper(sum - 1, temp * red / sum, red - 1, blue, role + 1, sequence, true);

}

// 蓝球 继续跑

if (blue > 0) {

helper(sum - 1, temp * blue / sum, red, blue - 1, role + 1, sequence, false);

}

} else if( role % 3 == 1){

//对于B角色而言只要考虑他选择蓝色的球继续循环的情况,因为红球则终止。

if( blue > 0) {

helper(sum - 1,  totalP * blue / sum,  red, blue - 1, role + 1, sequence, false);

}

} else if( role % 3 == 2) {

double temp = totalP;

//对于C而言 蓝球和红球都要考虑

if( red > 0) {

helper(sum - 1, temp *=  (red/sum), red - 1, blue, role + 1, sequence, false);

}

double temp2 = totalP;

if(blue > 0 ) {

helper(sum - 1, temp2 *= (blue/ sum), red, blue - 1, role + 1, sequence, false);

}

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值