題設:有n瓶水,其中有一瓶水有劇毒,如果小白鼠喝了會在24小時的時候死亡。
問:用多少只小白鼠能夠檢測出哪瓶水有劇毒?
要求:用的小白鼠數量少並且用時要短,並給出合理的過程與結論。
我的解題思路如下:
這是乙個二進位制開關(
0/1)問題,模擬于海明碼校驗演算法,將藥水進行二進位制編號(
0000000,0000001,0000010,0000011...
),算出至少多少位二進位制能夠將所有的小白鼠進行完全編號;
然後根據二進位制的位數選取小白鼠,將小白鼠對應於相應二進位制位,之後去依次遍歷不同小白鼠的相同位,如果此位為
1則喝下一點此瓶的藥水,此位為
0則不喝(至於怎麼喝不是我們考慮的範圍內,可以先按位進行藥水的混合,放到其他的瓶中,再讓小白鼠去喝混合後的藥水,當然混合後的藥水數量與選取小白鼠數量是相同的);
最後通過小白鼠的死活去鑑定哪瓶藥水有劇毒。
模擬例項分析:
1)假設共有
6瓶藥水,其中
1瓶有劇毒,其他無毒
2)通過計算
2^3 = 8 >= 6
,可知3
位二進位制數可以完全對所有藥水瓶進行編號,因此我們要選取
3只小白鼠做實驗
3)對藥水瓶進行二進位制編號,並且讓小白鼠按位去喝藥水(遇見
1喝,遇見
0不喝),示意圖如下所示:
小白鼠 二進位製碼
水瓶編號 a
b c0 0
0 01 0
0 12 0
1 03 0
1 14 1
0 05 1
0 1然後讓小白鼠
a去喝編號為4、
5瓶中的水;小白鼠
b去喝編號為2、
3瓶中的水;小白鼠
c去喝編號為1、
3、5瓶中的水
如果小白鼠a、
b、c都沒死(
000)
,則編號為
0的水瓶中的水有劇毒;
如果小白鼠a、
b沒死,c死(
001)
,則編號為
1的水瓶中的水有劇毒;
如果小白鼠a、
c沒死,b死(
010)
,則編號為
2的水瓶中的水有劇毒;
如果小白鼠
a沒死,b、
c死(011)
,則編號為
3的水瓶中的水有劇毒;
如果小白鼠a死,
b、c沒死(
100)
,則編號為
4的水瓶中的水有劇毒;
如果小白鼠a、
c死,b沒死(
101)
,則編號為
5的水瓶中的水有劇毒;
(實質上:我們可以保持小白鼠的位置不變,給沒死的小白鼠貼上標籤
0,死的貼上標籤
1,會得出一串二進位製碼,在將此段二進位製碼轉換成為十進位制,即得出有劇毒水瓶的編號)
4)隨著水瓶數量
n的增加,我們通過
2^m >= n
計算出所需要的小白鼠的數量m即可
用小白鼠鑑別有毒藥水問題
題設 有n瓶水,其中有一瓶水有劇毒,如果小白鼠喝了會在24小時的時候死亡。問 用多少只小白鼠能夠檢測出哪瓶水有劇毒?要求 用的小白鼠數量少並且用時要短,並給出合理的過程與結論。我的解題思路如下 這是乙個二進位制開關 0 1 問題,模擬于海明碼校驗演算法,將藥水進行二進位制編號 0000000,000...
用小白鼠鑑別有毒藥水問題
題設 有n瓶水,其中有一瓶水有劇毒,如果小白鼠喝了會在24小時的時候死亡。問 用多少只小白鼠能夠檢測出哪瓶水有劇毒?要求 用的小白鼠數量少並且用時要短,並給出合理的過程與結論。我的解題思路如下 這是乙個二進位制開關 0 1 問題,模擬于海明碼校驗演算法,將藥水進行二進位制編號 0000000,000...
小白鼠鑑別有毒水問題
題目 有1000瓶水,其中有一瓶有毒,小白鼠只要嘗一點帶毒的水24小時後就會死亡,至少要多少只小白鼠才能在24小時時鑑別出哪瓶水有毒。將1000瓶水編號。準備10個盤子並編號。準備10只小白鼠並編號 2 10 1024,用二進位制表示為10000000000,一共有11位,因為1024 1000,所...