一道收集优惠券的面试题

问题:

一个饭店发行一套优惠券,一套里面总共有 n 张不同的优惠券,顾客每次吃一次,可以随机获得一张优惠券。如果收集齐一套,下次吃饭可以打折。请问:顾客要来多少次才能收集齐一套优惠券?(是不是和小时候吃零食收集刮刮卡的情形是一样的,呵呵)

分析:

问题的难点在于顾客获得的优惠劵可能会有重复。但是,我们可以换一角度思考。

假设顾客第一次来,他一定会得到一张独一无二的优惠券,第二次来的时候,得到的优惠券和上次不重复的概率是 (n-1) / n, 第三次来的时候,得到与上两次不同的概率是 (n - 2) / n,.... ,到第 n 次来的时候,与前 n - 1 次收集到的优惠券不同的概率是 1 / n。

换句话说,拿到第一张不重复的优惠券需要的次数是 1, 拿到第二张与前一张不同的优惠券需要的次数是 n / (n - 1), 拿到第三张与前两张不同的优惠劵需要的次数是 n /(n - 2), 以此类推,拿到最后一张不重复的优惠券所需要的次数是 n / 1.


所以,总的次数是 1 + n / (n-1) + n /(n-2) + n / (n -3) + ... + n ~= n lg n.


转载请注明出处:http://blog.csdn.net/beiyeqingteng

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值