题意
这里有n种卡片,如果你想得到一张新的卡片,你需要花费W枚硬币来抽一张卡片。每次只能抽一张。所有的卡片出现的概率都是1/n,你每天可以得到1枚硬币。初始时候没有硬币也没有卡片。每W天,你就会抽一张卡片用这W枚硬币。在这个问题中,我们定义 W=(n-1)! 现在请你计算收集齐所有卡片的天数期望是多少。
分析
参考博客https://blog.csdn.net/qq_36553623/article/details/76696158
假设我们已经有了a张照片,想要得到第a+1张,我们抽中一张新卡的概率为 (n-a)/n 那么期望进行的次数是 1/p=n/(n-a)。可以通过等比数列求和再取一下极限得到这个式子。
有了这个式子就很好做了啊,从0到n-1枚举a,然后把他们的期望次数加起来。因为将这个问题分成n个独立事件去考虑,总期望等于各个期望的和。
#include <cstdio> #include <cstring> #include <algorithm> #include <iostream> using namespace std; int n,T,w; double ans; int main(){ scanf("%d",&T); for(int t=1;t<=T;t++){ ans=0; w=1; scanf("%d",&n); for(int i=1;i<n;i++)w=w*i; for(int i=0;i<n;i++){ ans+=(double)n/(n-i); } ans=ans*w; printf("%.1f ",ans); } return 0; }