偶然在社群上看到這個問題,看到了程式設計師的回答,饒有興趣,於是查詢了csdn後,終於看懂了。
有1000瓶液體(正常,無毒),但是由於工作人員失誤,將毒藥滴到了其中一瓶中,從外觀和氣味上完全無法分辨出哪乙個是被汙染過的,我們只知道這個毒藥的毒發期是7天,實驗室有10只小白鼠,只有7天的時間,如何實驗才能知道哪一瓶是被汙染的?
先讓我們欣賞一下老哥們的神回答:
倒掉一瓶,弄死乙隻小白鼠,說毒的已經被處理掉了。後面有人喝出毒的就說他造謠。(太天才了)
暴力窮舉法:
for
(int i=
0;i<=
1000
;i++
)
小白鼠老難受了。
接下來是正經的解法:
(1)、先將1000轉換為二進位制數字為1111101000,然後將每一瓶水先用十進位制編號,然後都轉換為十位的二進位制數(不足用0補全),再次編號。
(2)、小白鼠也用十進位制數編號。
(3)、如果毒藥藥性足夠強,將每瓶水進行如下操作:如0000000001,最後一位是1,就給編號為10的小白鼠喝一滴它的水;0000000011,後兩位是1,就給編號為9,10的小白鼠各喝一滴它的水;以此類推。
(4)、最後我們只需要統計編號為幾的小白鼠死亡,例如:1,3,5號小白鼠死亡,則有毒的水的編號就是1010100000,即是第672瓶水。
這道題運用了二進位制的思想,小白鼠的生與死對應著二進位製碼的0與1,而死亡小白鼠說明有毒的水在小白鼠編號位上的值為1。不得不說,是一道非常巧的題目。
老鼠與毒藥問題
大家應該都聽說過這個老題目 有 1000 個一模一樣的瓶子,其中有 999 瓶是普通的水,有一瓶是毒藥。任何喝下毒藥的生物都會在一星期之後死亡。現在,你只有 10 只小白鼠和一星期的時間,如何檢驗出哪個瓶子裡有毒藥?這個問題的答案也堪稱經典 把瓶子從 0 到 999 依次編號,然後全部轉換為 10 ...
老鼠與毒藥問題
有1000瓶藥,其中有一瓶有毒,老鼠一旦喝一點毒藥就會在24小時後死亡,問最少要多少只老鼠才能在24小時後知道哪一瓶是有毒的。把所有的數轉換成二進位制,如最大的1000轉化成二進位制為1111101000 將所有第一位為1的取出一些混合在乙個瓶子裡 將所有第二位為1的取出一些混合在乙個瓶子裡 將所有...
老鼠與毒藥問題
有1000瓶藥,其中有一瓶有毒,老鼠一旦喝一點毒藥就會在24小時後死亡,問最少要多少只老鼠才能在24小時後知道哪一瓶是有毒的。把所有的數轉換成二進位制,如最大的1000轉化成二進位制為1111101000 將所有第一位為1的取出一些混合在乙個瓶子裡 將所有第二位為1的取出一些混合在乙個瓶子裡 將所有...