●🧑個人主頁:你帥你先說.
●📃歡迎點贊👍關注💡收藏💖
●📖既選擇了遠方,便只顧風雨兼程,
●🤟歡迎大家有問題隨時私信我!
●🧐著作權:本文由[你帥你先說.]原創,CSDN首發,侵權必究,
題目
有 1000 瓶藥水,但是其中有一瓶是有毒的,小白鼠吃了一個星期以后就會死掉!請問,在一個星期內找出有毒的藥物,最少需要多少只小白鼠?
這題要是沒有最少兩個字,很多人上來就是直接1000只小鼠,

即便沒有最少兩個字,這樣做未免太費小鼠了吧,
那1000只太多了,500只可以嗎,每只小鼠喝兩瓶(不重復的喝),然后最后查出死掉的老鼠喝掉的兩瓶,極限二選一?如果脫離題目本身,這個方法倒是個不錯的方法,頂多把兩瓶都當做毒藥,舍棄一瓶倒也沒什么,可惜題目就是要求了要找出那一瓶毒藥,
既然通過一只小鼠確定毒藥的方法很費小鼠,為什么不用多只小鼠喝同樣的一瓶藥來確定毒藥,但這樣似乎也只能確定一個范圍,比如5只小鼠死了,我們只能在死了的小鼠喝的藥里面確定毒藥,所以我們必須保證喝到毒藥的小鼠身上有什么特征能夠幫我們逐漸縮小范圍,我們在學習編程中,有什么東西是有很多情況,但每種情況又是彼此獨立跟別的情況不一樣的,對了,就是二進制,我們知道對于32位平臺下,二進制一共有 2 32 2^{32} 232種情況,即
00000000000000000000000000000001
00000000000000000000000000000011
…
111111111111111111111111111111111111
1000瓶大概是在
2
10
2^{10}
210 的范圍內
所以需要10個bit位
那要怎么操作呢?
首先,先對小鼠進行編號

其次,給1000瓶藥水也進行編號,以二進制的形式,例如,第一瓶藥水編號為0000000001,第四瓶藥水為0000000100,以此類推
然后小鼠🐁就可以開始喝藥了
喝藥規則如下
編號為0的小鼠喝 2 0 2^{0} 20位是1的藥水
例如,0號🐁要喝
0000000001
0000000001
0000000011
0000000111
…
1111100001
以此類推,1號🐁要喝 2 1 2^{1} 21位是1的藥水
那最終要怎么知道哪一瓶藥有毒呢?
舉個栗子🌰
假如第0、1、3、6、7號🐁被毒死了,那就是0011001011是毒藥,那就是編號為203的是毒藥,
如有其它方法,歡迎在評論區留言,
走之前

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/295697.html
標籤:其他
上一篇:C語言之自定義型別
