题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26958
题意:有一个n面的骰子,每次投掷每个面都是等概率出现,求所有面都出现的期望投掷次数。
思路:f[i]表示已经出现了i个面,还需要投掷的期望次数,f[n] = 0 , f[i] = i/n * f[i] + ( n - i ) / n * f[i+1] + 1 , 化简后f[i] = f[i+1] + n / ( n - i ) , 所以答案就是∑n/i 1<=i<=n。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int main()
{
int t;
scanf("%d",&t);
int ca=1;
while(t--)
{
int n;
scanf("%d",&n);
double ans=0;
for(int i=1;i<=n;i++)
ans+=n*1.0/i;
printf("Case %d: %.10f\n",ca++,ans);
}
}