一.题目
小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));
}
}