题目描述: 不知道大家的童年有没有过和我相似的经历。我记得小时候经常买干脆面,不为别的,只是因为里面有一张人物卡片。其实有很多这样的活动都有一个相同的模式:N 种人物卡片,每次买一包干脆面随机得到一张。当你集齐这 N 种人物时,就会有相应的奖励。那时候还不懂怎么计算概率,白白给人家送了好多钱,吃了好多干脆面。现在的任务是,给你一个正整数 N (1 <= N <= 10^4),请你帮我从期望的角度计算平均需要买多少包干脆面才能集齐这 N 种人物。 提醒:由于结果可能不是整数,所以结果只保留到小数点后两位。
示例:
输入:N = 1
输出:1.00
分析:
- 1种卡片,怎么买都可以买到,期望就是 1
- 2种卡片,拿到第1种以后,拿到第2种的概率就是 1/2, 理论上还需要买2包。期望和 = 3/3 + 2/1
- 3种卡片, 拿到第1种以后,拿到第2种的概率就是2/3, 理论上需要买 3/2 包,再拿到第3种的概率就是 1/3 ,理论上需要买 3/1 包。 期望和 = 3/3 + 3/2 + 3/1
代码:
1
2
3
4
5
6
res = 0.0
for i in range(N, 0, -1):
res += (N * 1.0 / i)
print("{:.2f}".format(res))