好玩的題目,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出列。


方法都很笨,歡迎指教。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章