你只有 10 只小白鼠和一星期的時間,如何檢驗出哪個瓶子裡有毒藥?

時間 2021-05-06 07:51:23

1樓:清醒

我是這麼做的

以15個瓶子為例

第乙個老鼠分出左右兩個區間

[1,7] [9,15]

第二個老鼠再將區間二分為四

[1,3][5,7][9,11][13,15]第三隻老鼠繼續二分到最小單元

[1][3][5][7][9][11][13][15]這樣理論上只用n只老鼠即可判斷2∧(n + 1) 次方的瓶子當中的任意x瓶毒藥,只是第一只老鼠要喝整整2∧(n + 1) -1瓶毒藥,我懷疑它會被撐死

2樓:江湖騙子

有 1000 個一模一樣的瓶子,其中有 999 瓶是普通的水,有一瓶是毒藥。任何喝下毒藥的生物都會在一星期之後死亡。現在,你只有 10 只小白鼠和一星期的時間,如何檢驗出哪個瓶子裡有毒藥?

大約在2023年有個朋友在qq上給我出了一摸一樣的題(於是我猜測她應該是在知乎上看的),我當時花了大約5分鐘就想出了解答。我想到了二分法,但並沒有想到二進位制(雖然這兩者本質上是一樣的,不過二進位制的敘述起來更方便)。下面是我當年的解答:

很有趣的題。我的思路:

1,聯想到二分法。

2,注意到2^10=1024>1000

3,考慮對映的思想,第乙個小鼠的生死決定(或者說對應)毒藥是在前五百還是後五百(不妨設在前五百),第二個小鼠的生死決定(或者說對應)毒藥是在1-250還是251-500,以此類推。

我的解答如下:

第一步,為了敘述的方便,我們不妨再拿24個裝有普通水的瓶子,湊成1024個(其實不這麼幹也可以,就是敘述起來有點麻煩),將這1024個瓶子編號並從小到大排成一排。

第二步,將1-512號的水各取一點混合起來,讓第乙個小白鼠喝。

將1-256,513-768號共512瓶水各取一點混合起來,讓第二個小白鼠喝。

以此類推,將1024分成2^n份,每份的長度為1024/2^n,每份的起始點分別為1,(1024/2^n)+1,2(1024/2^n)+1,第k份的起始點為(k-1)(1024/2^n)+1,將每份從起點到該份的中點所有的瓶子各取一點混合起來(共有(2^n)*(1024/2^(n+1))=512瓶),讓第n+1個小鼠喝。(n=0,1,...,9)

這樣就可以了。

例如:第乙個小鼠死了,說明毒藥在1-512;第二個小鼠活了,說明在257-512;第三個小鼠活了,說明在385-512(都是包括端點的)。以此類推,就可以確定了。

設一共有n個瓶子,其中只有一瓶有毒藥,則我們按照這個方法需要多少只小白鼠呢?

易知存在唯一的正整數m,滿足2^(m-1)

關於用二進位制如何解答已經有其他人給出答案了,但我想用自己的語言更清晰地敘述一下:

首先,將1000個瓶子編號為0到999,將老鼠編號為1到10

999的二進位制表示為1111100111

將其他數字也寫成總共10位的二進位制數字,位數不足的在前面新增0。

方案一:將這些二進位制數字中第k位為1的所有數字對應的瓶子餵給第k個老鼠,k=1,2,...,10

我們最終會得到老鼠的死活序列

把死標為1,把活標為0,於是我們得到了乙個0-1序列,顯然該序列對應的十進位制數字即為毒藥所在的瓶子的編號。

方案二:將這些二進位制數字中第k位為0的所有數字對應的瓶子餵給第k個老鼠,k=1,2,...,10

我們最終會得到老鼠的死活序列

把死標為0,把活標為1,於是我們得到了乙個0-1序列,顯然該序列對應的十進位制數字即為毒藥所在的瓶子的編號。

方案三:方案二:將這些二進位制數字中第k位為x_k的所有數字對應的瓶子餵給第k個老鼠,k=1,2,...,10, x_k=0,1

我們最終會得到老鼠的死活序列

把死標為x_k,把活標為(1/2)[1+(-1)^(x_k)],於是我們得到了乙個0-1序列,顯然該序列對應的十進位制數字即為毒藥所在的瓶子的編號。

3樓:Lazybones

看了前面的答案感覺都不能解釋為什麼通過耗子死活後排序得出的二進位制就是對應瓶子的二進位制編碼,

其實這個問題可以這麼想,1000個瓶子按瓶號貼上對應二進位制號碼後,將每一位二進位制區分的話,相當於乙個二進位制位可以把1000分成500和500,比如瓶號中第一位的二進位制分成兩份的話,其中500瓶他們的第一位都是0,另外乙份它們第一位二進位制是1,我每次都把1的給老鼠吃,死了就確定了這個有毒的水第一位二進位制肯定是1,然後在用第二位二進位制分成500和500,就可以確定第二個二進位制是0還是1,以此類推進行10次,按每只老鼠的情況就能判斷某個瓶的某位上的編號是0還是1,將其全部連線就是有毒的水的編號了

4樓:滔滔不絕

確實是個二進位制問題,精髓在於毒藥只有一瓶,其他放心喝不會產生效果。思路如下:2^10=1024大於1000,所以可以對1000個瓶子用10位二進位制編碼。

這樣每個瓶子都會對應乙個唯一獨特的二進位製碼。接著將10只小白鼠排序從1到10,現在假如你拿出其中乙個瓶子編碼為1000000001,將其餵給第1個和第10個小白鼠,以此類推,只要對應的二進位製碼上是1就餵給對應的小白鼠,直到喂完1000瓶。這樣就完成了投喂,等乙個星期後,檢查小白鼠的死亡情況,死亡記1,活著記0,將1和0按之前順序排列就是毒藥對應的二進位製碼啦。

前提是小白鼠要足夠抗喝[飆淚笑],你的編碼速度和投喂速度要足夠的快哦。

5樓:Modem18k

如果只有一杯有毒,把杯子編號,老鼠的生死作為二進位制的 0 1,來表示杯子的序號,恰好2的10次方為1024足夠標示,如果裡面有2b杯是有毒的,就會複雜一點,其實就做乙個小變化,依然給杯子編號,然後從中選出998杯,這個組合的數量455990,答案19

6樓:mosaic

根據毒藥的特點,要麼不溶於水,要麼密度和水不一樣,要麼氣味和水不一樣,完全可以通過「望聞問切」來區分。大不了準備個空瓶子,裝點水,一瓶瓶的倒入一點,監測水的密度即可。何必殘害10條無辜的生命?

7樓:徐風來

就是乙個反推思維

乙隻老鼠喝哪幾瓶水,即使老鼠死了,你也無法從中得出有效的資訊,最多只能知道這幾瓶水中某一瓶是有毒的。

但是一瓶水給哪幾隻老鼠喝,假設水有毒,我們肯定可以得知,這幾隻老鼠都會死。所以我們才可以從哪幾隻老鼠死了,推斷出哪瓶水有毒。

所以0代表不給對應的老鼠喝,1代表給對應的老鼠喝。

這就成功把老鼠的死活和8瓶水聯絡起來了。

所以這個問題的思考邏輯是這樣的:我們一拿到問題,第一反應肯定是用二進位制去做。可是如何進行乙個對應呢?

我們往往會在某個老鼠喝了那幾瓶水這個問題上卡主。這個時候,我們應該先去放棄對於這個問題的思考,而是簡單的考慮這個「對應」的本身。如上面一樣,我們給每個瓶子用二進位製標標號,如上面列出來的一樣。

可以看到,是3列,8行。所以自然而然可以明白:列就是小白鼠,行就是瓶子。

所以自然可以得出,比如110,就代表4+2=6號瓶子,被A、B鼠喝了。

8樓:Eimon Lee

其實是個排列組合問題,乙隻老鼠只有生/死兩種狀態,那麼需要表達1000個狀態,需要log(2)1000個位元,向上取整=10

為了解釋方便,把瓶子數量降下來,只有8瓶,因此。需要的老鼠數量為log(2)8=3,3只老鼠編號為1,2,3,這3個元素可能表達的狀態總量為{空,1,2,3,12,13,23,123}瓶子上標有號的就是老鼠要喝的,比如1號老鼠要喝的就是1,12,13,123這4瓶,最後看那幾隻死了,就是對應編號的瓶子

9樓:兜兜俠

各位的理論實驗都好有趣啊∠( 」∠)_

從實際情況來說既是不考慮人工飼養和成本各方面問題這實驗都是板上釘釘的impossible啊……

brain storm 倒是可以的

10樓:豆豆

這個題的原型是

有 1000 個一模一樣的瓶子,其中有 999 瓶是普通的水,有一瓶是毒藥。任何喝下毒藥的生物都會在一星期之後死亡。現在,你需要多少小白鼠和一星期的時間,如何檢驗出哪個瓶子裡有毒藥?

看見都是程式設計師模式,寫乙個數學模式的。

靈感來自於維度座標

先把藥水數目減少至9,來做說明

如圖,把9個罈子投射到二維座標:

老鼠x1,x2號吃 x = 1的3瓶,x=2上的三瓶;

老鼠y1.y2號吃y =1的三瓶,y= 2的三瓶。

為什麼沒有x3老鼠和y3老鼠呢?因為確定是一瓶有毒,所以,如果x1,x2都不死,自然確認有毒的在x3.-----》所以在後面公式中是(x-1)+(y-1).......

投射到3維座標也乙個道理。

老鼠x1,y1,z1吃乙個平面;

投射到4維空間他們就吃乙個矩形。

大概就這樣。

所以最後出來的模型大概是

x*y*z*h1000

min((x-1)+(y-1)+(z-1)+(h-1最後算出來就是10只。

11樓:

師弟P的solution跟上面所說的二進位制法一致。

另乙個師弟Z的solution如下:

一千瓶藥,分別標號為000,001到999十隻老鼠,分別標號為0,1到9

實驗開始後,

首先讓十隻老鼠分別喝百位數字與自身編號對應的瓶子中的藥。

然後讓十隻老鼠溜達一下消消食30 min。

後讓十隻老鼠分別喝十位數字與自身編號相對應的瓶子中的藥。

然後再讓他們溜達一下消消食,30min。

接下來再讓十隻老鼠分別和個位數字與其自身編號相對應的瓶子中的藥。

一周後通過老鼠死掉編號與順序,可以確定毒藥的瓶子編號。以上~

12樓:只看不發

檢驗不出來!題設只有乙個星期時間,老鼠吃了毒藥「乙個星期過後」才死,老鼠死了你還要花時間整理資料推算結論,所以檢驗不出來。

13樓:今夕流年

女朋友學分析化學的,看到這個問題說,說按進樣測樣的做法,最多七個半小時可以測出來,乙隻老鼠都不用。

其實就是吐槽一下有些數學題的無聊

14樓:王彬驊

告訴這十隻小白鼠,我會以每10分鐘一瓶的速度,用乙個星期喝完1000瓶水,等到我死的那一刻,用死亡時間去推算出乙個星期前我喝的是第幾瓶,然後告訴題主。

15樓:西江月

將1000個瓶子平分成500個,2堆。選兩個老鼠吃,死掉的那一堆再作為研究物件。再將500的分兩撥,再選兩個老鼠吃。

依次類推,可以選出有毒的那個瓶子。這個方法與之前答主的思路不一樣。

攝影小白乙隻有個問題!?

追風一笑 對於攝影剛剛接觸,又想玩單反的,我建議可以買佳能或是尼康的入門機。前期可以先買乙個套機,鏡頭通常是18 55的焦段,基本上是夠用了,用來熟悉機身和操作,弄懂基本的光圈 快門 ISO等攝影基本功。後期可以根據情況購買,我是佳能使用者,就直接說佳能的鏡頭 人像可以買個50 1.8約600元或是...

小白乙隻,有關於HIIT的問題請教大神們!?

剛學會用手機 不推薦insanity,雖然我目前正在練,因為in需要很多的健身基礎才行 自己感覺如此 推薦一組無間歇訓練http m.weibo.cn 2921603920 3891220029439353?uicode 10000002 featurecode 10000085 mid 38912...

如果只有大公尺 雞蛋 胡蘿蔔 小白菜 蔥,你變出什麼晚餐?

無產階級 公尺飯蒸上,雞蛋打散,胡蘿蔔擦絲,蔥切蔥花,小白菜清洗乾淨。熱鍋放少許油把胡蘿蔔絲煸炒一下盛起備用,另乙個爐子用小奶鍋放半鍋水,放兩片姜,鹽,少許雞精燒著 這邊熱鍋放油,放入打散的雞蛋,直接用筷子打散,在雞蛋未完全凝固時放入胡蘿蔔絲,放鹽,少許糖,略炒一下放入2 3蔥花翻炒兩下起鍋。那邊湯...