偶然在社區上看到這個問題,看到了程式員的回答,饒有興趣,于是查詢了csdn后,終于看懂了,
問題描述
有1000瓶液體(正常,無毒),但是由于作業人員失誤,將毒藥滴到了其中一瓶中,從外觀和氣味上完全無法分辨出哪一個是被污染過的,我們只知道這個毒藥的毒發期是7天,實驗室有10只小白鼠,只有7天的時間,如何實驗才能知道哪一瓶是被污染的?
解決方案:
先讓我們欣賞一下老哥們的神回答:
倒掉一瓶,弄死一只小白鼠,說毒的已經被處理掉了,后面有人喝出毒的就說他造謠,(太天才了)
暴力窮舉法:
for(int i=0;i<=1000;i++)
{
if (mouse_die())
return i;
}
小白鼠老難受了,
接下來是正經的解法:
(1)、先將1000轉換為二進制數字為1111101000,然后將每一瓶水先用十進制編號,然后都轉換為十位的二進制數(不足用0補全),再次編號,
(2)、小白鼠也用十進制數編號,
(3)、如果毒藥藥性足夠強,將每瓶水進行如下操作:如0000000001,最后一位是1,就給編號為10的小白鼠喝一滴它的水;0000000011,后兩位是1,就給編號為9,10的小白鼠各喝一滴它的水;以此類推,
(4)、最后我們只需要統計編號為幾的小白鼠死亡,例如:1,3,5號小白鼠死亡,則有毒的水的編號就是1010100000,即是第672瓶水,
這道題運用了二進制的思想,小白鼠的生與死對應著二進制碼的0與1,而死亡小白鼠說明有毒的水在小白鼠編號位上的值為1,不得不說,是一道非常巧的題目,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/198373.html
標籤:其他
