1、1000瓶毒葯要至少多少只老鼠,假設每只老鼠吃了葯之后,如果中毒會24小時內毒發而死,才能找出具體的哪一瓶?
答案是至少10只,需要將葯混合起來,需要喂一輪。
題解
位運算,每一只老鼠都可以當做一個二進位,代表0和1,0代表老鼠沒事,1代表老鼠死了
根據2^10=1024,所以至少10個老鼠可以確定1000個瓶子具體哪個瓶子有毒。
為了更好的表達原理,將題目整體縮小為如何用3只老鼠確定8個瓶子(2^3 = 8)。
一位表示一個老鼠,0-7表示8個瓶子。例如5號瓶子,對應是101,那就是老鼠1和老鼠3都得吃,4號瓶子對應是100,也就是只讓老鼠3吃。
映射關系:
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吃。
根據這個邏輯:分別將1、3、5、7號瓶子的葯混起來給老鼠1吃,2、3、6、7號瓶子的葯混起來給老鼠2吃,
4、5、6、7號瓶子的葯混起來給老鼠3吃,哪一只老鼠死了,相應的位置就為1。
現在對某瓶未知序號的毒葯,如果出現了情況是老鼠1死了、老鼠2沒死、老鼠3死了,這就是101情況對應5號瓶子,那么就是101=5號瓶子有毒。
按照這個原理,10個老鼠也就可以確定1000個瓶子了。
2、明天晚上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組酒的老鼠死亡,則宴會用2組的9瓶酒
-
喝2組酒的老鼠死亡,則宴會用1組的9瓶酒
-
2只老鼠都死亡,則說明從1-9中拿出的那瓶酒是毒酒,則宴會使用剩余16瓶中的任意9瓶
情況二原理就是二分法,哪一組沒出事就用那一組。