【2021】腾讯秋招技术岗编程题之抽奖

260 阅读1分钟

一.题目

小A在玩一个网络游戏。这个游戏有个抽装备环节。装备池总共有n+m件装备,分别为n件普通装备和m件ssr装备。抽一次装备的费用按你抽中的装备决定。

抽中每一件装备的概率都为1/(n+m)。如果你抽中了ssr装备。这次的抽装备费用为2金币,否则这次的费用为1金币。如果你抽中了ssr装备,得到奖励,并且装备不会放回。如果你抽中了普通装备。得到奖励,但是这件装备会放回装备池。现在小A希望抽中所有的ssr装备,请你计算一下:需要花费金币的期望值。

时间限制:C/C++ 1秒,其他语言2秒

空间限制:C/C++ 256M,其他语言512M

输入描述:

输入一行:n,m(1<=n,m<=106)

输出描述:

抽中所有的ssr装备,需要花费金币的期望值。输出保留2位有效小数。

示例1

输入例子:

2 1

输出例子:

4.00

二.解析

import java.util.Scanner;
import java.text.DecimalFormat;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int m = in.nextInt();
        DecimalFormat df = new DecimalFormat("0.00");
        double ans = 0.00;
        for(int i =1;i <= m;i ++) {   // i要等于1,从1开始,要不然就会无穷大
            ans += 2 + (double)n/i;
        }
        System.out.println(df.format(ans));

    }
}