【期望】fzu 2278-- YYS

Problem 2278 YYS

Accept: 39    Submit: 118
Time Limit: 1000 mSec    Memory Limit : 262144 KB

 Problem Description

Yinyangshi is a famous RPG game on mobile phones.

Kim enjoys collecting cards in this game. Suppose there are n kinds of cards. If you want to get a new card, you need to pay W coins to draw a card. Each time you can only draw one card, all the cards appear randomly with same probability 1/n. Kim can get 1 coin each day. Suppose Kim has 0 coin and no cards on day 0. Every W days, Kim can draw a card with W coins. In this problem ,we define W=(n-1)!.

Now Kim wants to know the expected days he can collect all the n kinds of cards.

 Input

The first line an integer T(1 ≤ T ≤ 10). There are T test cases.

The next T lines, each line an integer n. (1≤n≤3000)

 Output

For each n, output the expected days to collect all the n kinds of cards, rounded to one decimal place.

 Sample Input

4
1
2
5
9

 Sample Output

1.0
3.0
274.0
1026576.0

 Source

第八届福建省大学生程序设计竞赛-重现赛(感谢承办方厦门理工学院)

题意:有n种卡片,抽到每张卡片的概率为1/n,问把这n种卡片都抽一遍的期望;
思路:假设已经抽到了k种卡片,那么接下来要抽剩下的n-k张卡片中的一张,抽到这一张的期望为  1/(1/(n-k)) (服从几何分布); 总期望等于抽每一张的期望的和
参考http://blog.csdn.net/baidu_35643793/article/details/76272605;
代码:
import java.io.*;
import java.math.BigInteger;
import java.util.*;

public class Main {
	public static void main(String[] args)
	{
		Scanner in=new Scanner(System.in);
		BigInteger a[]=new BigInteger[3500];
		a[0]=new BigInteger("1");
		
		for(int i=1;i<=3100;i++)
		{
		    BigInteger t=BigInteger.valueOf(i);
			a[i]=a[i-1].multiply(t);
		}
		
		int test=in.nextInt();
		while(test-->0)
		{
			int n=in.nextInt();
			BigInteger sum=BigInteger.ZERO;
			for(int i=1;i<=n;i++)
				sum=sum.add(a[n].divide(BigInteger.valueOf(i)));
			System.out.print(sum);
			System.out.println(".0");
		}
	}
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值