好玩的题目,10个人选4个

一次面试的时候,面试官问我的题,挺有意思的,拿来分享把玩一下,咱们得感谢原创题目的作者哇!

你现在有个随机数发生器只能产生0、1,现在有10个人,要选四个出来,要保证公平,请给出解决方法。

答案不唯一的,欢迎大家在这里分享你的idea

我的方法:

先用0-9编号所有人,下面的方法不会因为编号影响公平性

1,产生4个随机数,组成一个四位二进制数,可表示0-15,输出大于等于10的数时,舍去,再来;输出0-9时,若此人尚未出列,则再来,直至选出四个人。

方法缺点很多,输出0-15,产生一个大于9的数,概率是6/16,太大,当已经生成三个编号时,再生成冲突的概率很大3/10.

2.改进第一种,生成一个编号去掉一个,即原来是10个编号,下一次重新0-9编号,实际上前两次与前一种方法无区别,剩8个人的时候,只用三个随机数发生器就够了。

3.每个人拿一个随机数发生器,

第i轮:每个人都生成一个随机数,1的出列,若1的个数,和已经选出来的人数多于4个,则这些人进入下一轮;若少于4个,则1出列的人加入到那4个名额中,剩下的0的人进入下一轮。

比上边要简单,看起来清晰,貌似用的发生器次数比较少。即时间复杂度较低,较快

4每次选少出列,少的优先进入4个名额,具体地,和3较像

第i轮:每个人一个随机数发生器,全部生成一次,0,1人数少得出列,若这些人加上已经选出的人超过四个,则这些刚出列的人进入下一轮;若小于4个出列,加入到4个名额中,剩余的那些人进入下一轮。

解释:0,1人数少得出列:若1的个数比0少,则1的人出列,若相等再来一次,若0少,则0出列。


方法都很笨,欢迎指教。

展开阅读全文

没有更多推荐了,返回首页