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 0≤n≤20
对于 70 % 70\% 70%的数据,有 0 ≤ n ≤ 1000 0≤n≤1000 0≤n≤1000
对于 100 % 100\% 100%的数据,有 0 ≤ n ≤ 10000 0≤n≤10000 0≤n≤10000
题解:
很经典的一道期望好题。
我们设 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×nn−i
要么取到已经取到的颜色,即 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=n−in
代码如下(就一行23333 )
double n,s,i;int main(){scanf("%lf",&n);for(i=1;i<=n;i++)s+=n/i;printf("%.4lf",s);}