DTOJ 2462: 收集(collecting)

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

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

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

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

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

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

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

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

题解:

很经典的一道期望好题。

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

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

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

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

代码如下(就一行23333

double n,s,i;int main(){scanf("%lf",&n);for(i=1;i<=n;i++)s+=n/i;printf("%.4lf",s);}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

可爱の小公举

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值