經典智力題 - 老鼠試毒

一、1000瓶毒藥要至少多少隻老鼠,假設每隻老鼠吃了藥以後,若是中毒會24小時內毒發而死,才能找出具體的哪一瓶?code

答案是至少10只,須要將藥混合起來,須要喂一輪。原理

題解

位運算,每一隻老鼠均可以當作一個二進位,表明0和1,0表明老鼠沒事,1表明老鼠死了時間

根據2^10=1024,因此至少10個老鼠能夠肯定1000個瓶子具體哪一個瓶子有毒。co

爲了更好的表達原理,將題目總體縮小爲如何用3只老鼠肯定8個瓶子(2^3 = 8)。位運算

一位表示一個老鼠,0-7表示8個瓶子。例如5號瓶子,對應是101,那就是老鼠1和老鼠3都得吃,4號瓶子對應是100,也就是隻讓老鼠1吃。

映射關係:
000 = 0
001 = 1
010 = 2
011 = 3
100 = 4
101 = 5
110 = 6
111 = 7

每一位就表示一個老鼠,右側的0-7表示8個瓶子。

例如5號瓶子,對應是101,那就是老鼠1和老鼠3都得吃;4號瓶子對應是100,也就是隻讓老鼠3吃。

根據這個邏輯:分別將一、三、五、7號瓶子的藥混起來給老鼠1吃,二、三、六、7號瓶子的藥混起來給老鼠2吃,

四、五、六、7號瓶子的藥混起來給老鼠3吃,哪一隻老鼠死了,相應的位置就爲1。

如今對某瓶未知序號的毒藥,若是出現了狀況是老鼠1死了、老鼠2沒死、老鼠3死了,這就是101狀況對應5號瓶子,那麼就是101=5號瓶子有毒。

按照這個原理,10個老鼠也就能夠肯定1000個瓶子了。


二、明天晚上21:00的宴會須要9瓶酒,酒窖裏現有17瓶酒,其中有一瓶混入了慢性毒藥,只對人和老鼠有影響,吃了之後,無藥可醫,但需且僅需24小時發做。如今是晚上19:00,請問至少須要多少隻老鼠才能選出宴會用的酒?

題解

晚上19點到第二晚21點,還有26小時時間,24小時毒發能夠容許還有兩個小時可操做,即全部操做要在今晚21點前完成:

狀況一:嚴格24小時準時毒發而死

一隻老鼠,每隔幾分鐘就按順序吃一瓶酒,那到了明天晚上19點開始觀察老鼠的死亡時間,就能反推出最初是哪一瓶酒是帶毒的了。

狀況二:大約24小時纔會毒發而死

給17瓶酒分別從1編號到17,而後分紅兩組:

1組是1-9編號的酒共9瓶,

2組是10-17編號的酒外加上從1-9編號中的任意一瓶酒,共9瓶,

則共須要兩隻老鼠試喝2組中的酒,

則可能發生的結果爲:

  1. 喝1組酒的老鼠死亡,則宴會用2組的9瓶酒

  2. 喝2組酒的老鼠死亡,則宴會用1組的9瓶酒

  3. 2只老鼠都死亡,則說明從1-9中拿出的那瓶酒是毒酒,則宴會使用剩餘16瓶中的任意9瓶

狀況二原理就是二分法,哪一組沒出事就用那一組。

相關文章
相關標籤/搜索