【期望】fzu 2278-- YYS

来源:互联网 发布:网络机顶盒多少钱一个 编辑:程序博客网 时间:2024/06/06 10:48
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");}}}




原创粉丝点击