一道收集优惠券的面试题

问题:

一个饭店发行一套优惠券,一套里面总共有 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

你可能感兴趣的:(面试)