[概率论(几何分布)]
一个拥有个面的骰子,期望投掷多少次才能保证每一面都至少出现过一次?
设随机变量表示上述条件所需的投掷次数,求

设:
表示:现在已经有个面了,还需要期望投掷次会有个面
X_{1}表示:现在已经有1个面了,还需要期望投掷X_{1}次会有2个面
X_{2}表示:现在已经有2个面了,还需要期望投掷X_{2}次会有3个面
...
X_{n-1}表示:现在已经有n-1个面了,还需要期望投掷X_{n-1}次会有n个面
那么
即转化为求了:
现在已经有2个面了,还需要期望投掷X_{i}次会有3个面
那么直接投掷出还没有出现的面的概率为,投掷出已经出现过的面的概率为
几何分布:几何分布是离散型机率分布。描述第次伯努利试验成功的机率。详细的说,是: 次伯努利试验,前n -1次皆失败,第次才成功的概率。
概率:P(X=k)=(1-p)^{k-1}\times p
期望:
方差:

所以
那么:E(X)=E(X_{0})+E(X_{1})+E(X_{2})+...+E(X_{n-1})=\frac{n}{n-0}+\frac{n}{n-1}+\frac{n}{n-2}+...+\frac{n}{2}+\frac{n}{1}
E(X)=E(X_{0})+E(X_{1})+E(X_{2})+...+E(X_{n-1})=\frac{n}{n-0}+\frac{n}{n-1}+\frac{n}{n-2}+...+\frac{n}{2}+\frac{n}{1}
总代码:
#include<bits/stdc++.h>
using namespace std;

#define endl '\n'
#define int long long
#define IOS ios::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
#define HelloWorld IOS;


signed main(){
    HelloWorld;
    
    int n; cin >> n;
    double ans = 0;
    for(int i = 1; i <= n; i ++){
        ans += 1.0 / (n - i + 1);
    }
    ans = ans * 1.0 * n;
    cout << fixed << setprecision(9) << ans << endl;
    return 0;
}