DTOJ 2462: 收集(collecting)

版权声明:神犇使用记得标明出处哦QAQ https://blog.csdn.net/qq_41717018/article/details/83789581

2462: 收集(collecting)
时间限制: 1 S e c 1 Sec 内存限制: 128 M B 128 MB O 2 O2
提交: 85 85 解决: 62 62

题目描述
教育超市最近进行一项促销活动,凡是购物消费就可以获得小玻璃珠一个。喜爱收集小玩意儿的 x y xy 当然不会错过这个活动。假定一共有 n n 种颜色的玻璃珠,每次发放玻璃珠的颜色是随机的(即获得每种颜色的玻璃珠的概率是相同的)。 x y xy 想知道要收集所有颜色的珠子,期望购买的次数是多少。

输入
仅一行,一个非负整数 n n ,表示总数。

输出
仅一行,一个实数,表示答案,保留 4 4 位小数。

样例输入
输入样例一
1
输入样例二
2
样例输出
输出样例一
1.0000
输出样例二
3.0000
提示
【数据范围及约定】

对于 40 % 40\% 的数据,有 0 n 20 0≤n≤20

对于 70 % 70\% 的数据,有 0 n 1000 0≤n≤1000

对于 100 % 100\% 的数据,有 0 n 10000 0≤n≤10000

题解:

很经典的一道期望好题。

我们设 f i f_{i} 表示我已经取到前 i i 种颜色,要取第 i + 1 i+1 种不同的物品的期望步数。

所以要么一步就可以得到下一种颜色,即 1 × n i n 1\times \frac{n-i}{n}

要么取到已经取到的颜色,即 i n × ( f i + 1 ) \frac{i}{n}\times (f_{i}+1)

解方程,即可得出 f i = n n i f_{i}=\frac{n}{n-i}

代码如下(就一行23333

double n,s,i;int main(){scanf("%lf",&n);for(i=1;i<=n;i++)s+=n/i;printf("%.4lf",s);}

猜你喜欢

转载自blog.csdn.net/qq_41717018/article/details/83789581
今日推荐