老鼠毒藥問題

2022-08-11 08:06:09 字數 3811 閱讀 2894

問題1

:1000瓶水中有

1瓶下了毒,老鼠只要喝一點點就會在一周之內死掉,問至少需要多少只老鼠,才能在一周之內找出是哪一瓶水有毒?

(微軟筆試題

)[解析

] 假設有

n只老鼠,則瓶數的上限n = 2 ^ n

。將瓶子的

10進製編號(0 - n-1)改為n位的2進製碼,然後

從左到右:讓第1只老鼠喝所有

編號的2

進製碼中

第1位是

1的瓶子中的水

,第2只老鼠喝所有

編號的2

進製碼中

第2位是

1的瓶子中的水

,……,第n

只老鼠喝所有

編號的2

進製碼中第n

位是1的瓶子中的水。

這裡取n=2示例:

瓶的編號

瓶的編號的

2進製表示

是否餵給第

1只老鼠

(0,不喂;1,喂)

是否餵給第

2只老鼠

(0,不喂;1,喂)000

00101

01210

10311

11這樣,由第n只老鼠一周後的死活情況就可確定毒水瓶的編號的2進製碼的左起第n位:老鼠死,第n位為1;老鼠活,第n位為0。

有毒的瓶

的編號有毒的瓶的編號

的2進製表示第

1只老鼠是否會死

(0,不死;1,死)第2

只老鼠是否會死

(0,不死;1,死)000

00101

01210

10311

11由此可以判斷n瓶水只需

log2 n只老鼠即可找出其中的毒藥瓶。

問題2:

1000瓶水中有

1瓶下了毒,老鼠只要喝一點點就會在一周之內死掉,問至少需要多少只老鼠,才能在

兩周之內找出是哪一瓶水有毒?

[解析] 

問題2與問題1的不同之處在於,問題2中

老鼠可以參加兩次實驗

,這樣,每只老鼠就有

死死(第1週死掉)

、生死(第2週死掉)

、生生(第2週後仍然活著)

3種狀態。問題

1中每只老鼠只有生或死

2種狀態,所以對瓶子的編號採用了

2進製,問題2

中每只老鼠有

3種狀態,所以對瓶子的編號應採用

3進製。

假設有n只老鼠,則瓶數的上限n = 3 ^ n

。將瓶子的

10進製編號(0 - n-1)改為n位的3進製碼。

第1次實驗:

從左到右:讓第1只老鼠喝所有

編號的3

進製碼中

第1位是

2的瓶子中的水

,第2只老鼠喝所有

編號的3

進製碼中

第2位是

2的瓶子中的水

,……,第n

只老鼠喝所有

編號的2

進製碼中第n

位是2的瓶子中的水。

這裡取n=2示例:

瓶的編號

瓶的編號的

3進製表示

是否餵給第

1只老鼠

(0,1,不喂;2,喂)

是否餵給第

2只老鼠

(0,1,不喂;2,喂)00

0001

0101

2020

23101

04111

15121

26202

07212

18222

2這樣,由第n只老鼠第1週後的死活情況就可確定毒水瓶的編號的3進製碼的左起第n位是不是2:老鼠死,第n位為2;老鼠活,第n位為0或1。

有毒的瓶

的編號有毒的瓶的編號

的2進製表示第

1只老鼠是否會死

(0,1,不死;2,死)第2

只老鼠是否會死

(0,1,不死;2,死)00

0001

0101

2020

23101

04111

15121

26202

07212

18222

2不妨假設毒水瓶的編號是5,則第1次實驗的結果為第1只老鼠不死,第2只死掉,據此可判斷出毒水瓶的編號的3進製碼的左起第1位為0或1,第2位為2,所以可能的編號為2(02)或5(12)。

第2次實驗:

對於所有還活著的老鼠,

從左到右:讓第1只老鼠喝所有

編號的3

進製碼中

第1位是

1的瓶子中的水

,第2只老鼠喝所有

編號的3

進製碼中

第2位是

1的瓶子中的水

,……,第n

只老鼠喝所有

編號的3

進製碼中第n

位是1的瓶子中的水。

瓶的編號

瓶的編號的

3進製表示

是否餵給第

1只老鼠

(0,不喂;1,喂)20

20512

1這樣,由第n只老鼠第2週後的死活情況就可確定毒水瓶的編號的3進製碼的左起第n位:老鼠死,第n位為1;老鼠活,第n位為0。

有毒的瓶

的編號有毒的瓶的編號

的2進製表示第

1只老鼠是否會死

(0,不死;1,死)20

20512

1問題3

:n瓶水中有1

瓶下了毒,老鼠只要喝一點點就會在一周之內死掉,現在由n只老鼠,問如果要求在第k周結束時找出是哪一瓶水有毒,n的最大值可以取多少?

[解析] 

問題3中

老鼠可以參加

k次實驗

,這樣,每只老鼠就有

:第1週死掉,第2週死掉,……第k週死掉

,第k週後仍然活著,共(k+1)

種狀態。所以對瓶子的編號應採用(k+1)進製。

假設有n只老鼠,則瓶數的上限n = (k+1) ^ n

。將瓶子的10進製編號(0 - n-1)改為n位的

(k+1)

進製碼。

第1次實驗:

從左到右:讓第1只老鼠喝所有編號的

(k+1)

進製碼中第1位是

k的瓶子中的水,第2只老鼠喝所有編號的

(k+1)

進製碼中第2位是

k的瓶子中的水,……,第n只老鼠喝所有編號的

(k+1)

進製碼中第n位是

k的瓶子中的水。

這樣,由第n只老鼠第1週後的死活情況就可確定毒水瓶的編號的

(k+1)

進製碼的左起第n位是不是

k:老鼠死,第n位為

k;老鼠活,第n位為0

,1,……,(k-1)中的任意數

。第2次實驗:

對於所有還活著的老鼠,從左到右:讓第1只老鼠喝所有編號的

(k+1)

進製碼中第1位是

(k-1)

的瓶子中的水,第2只老鼠喝所有編號的

(k+1)

進製碼中第2位是

(k-1)

的瓶子中的水,……,第n只老鼠喝所有編號的

(k+1)

進製碼中第n位是

(k-1)

的瓶子中的水。

這樣,由第n只老鼠第2週後的死活情況就可確定毒水瓶的編號的

(k+1)

進製碼的左起第n位是不是

(k-1)

:老鼠死,第n位為

(k-1)

;老鼠活,第n位為0

,1,……,(k-2)中的任意數

。接下來的實驗以此類推,一直進行到第k次實驗為止。

老鼠與毒藥問題

偶然在社群上看到這個問題,看到了程式設計師的回答,饒有興趣,於是查詢了csdn後,終於看懂了。有1000瓶液體 正常,無毒 但是由於工作人員失誤,將毒藥滴到了其中一瓶中,從外觀和氣味上完全無法分辨出哪乙個是被汙染過的,我們只知道這個毒藥的毒發期是7天,實驗室有10只小白鼠,只有7天的時間,如何實驗才...

老鼠與毒藥問題

大家應該都聽說過這個老題目 有 1000 個一模一樣的瓶子,其中有 999 瓶是普通的水,有一瓶是毒藥。任何喝下毒藥的生物都會在一星期之後死亡。現在,你只有 10 只小白鼠和一星期的時間,如何檢驗出哪個瓶子裡有毒藥?這個問題的答案也堪稱經典 把瓶子從 0 到 999 依次編號,然後全部轉換為 10 ...

老鼠與毒藥問題

有1000瓶藥,其中有一瓶有毒,老鼠一旦喝一點毒藥就會在24小時後死亡,問最少要多少只老鼠才能在24小時後知道哪一瓶是有毒的。把所有的數轉換成二進位制,如最大的1000轉化成二進位制為1111101000 將所有第一位為1的取出一些混合在乙個瓶子裡 將所有第二位為1的取出一些混合在乙個瓶子裡 將所有...