1. 程式人生 > 實用技巧 >【面經】小白鼠喝水問題

【面經】小白鼠喝水問題

10000瓶水,其中一瓶有毒,小白鼠喝後12小時才會有反應,問在12小時內需要最少多少隻小白鼠能知道哪瓶水有毒。

答案\(log_2{10000}=14\)

解析:本質是讓一隻小白鼠儘可能多得喝(這樣可以用更少的小白鼠)同時還能夠簡單的找到是哪杯水有毒。

  • 第一步

    給10000個瓶分別標上如下標籤(14位長度)

    			00000000000001 (第1瓶) 
    			00000000000010 (第2瓶)
    			00000000000011 (第3瓶) 
    			...... 
    			10011100010000 (第10000瓶)
    
  • 第二步

    從編號最後一位是1的所有瓶子裡面取出1滴混在一起(比如從第一瓶,第三瓶,。。。,裡分別取出一滴混在一起)並標上記號為1。

    從編號倒數第二位為1的所有瓶子裡取出1滴混在一起(比如從第二瓶,第三瓶,。。。,裡分別取出一滴混在一起)並標上幾號位2。

    以此類推。。。

    從編號第一位是1的所有的瓶子裡面取出1滴混在一起並標上記號為14。

  • 第三步

    小白鼠排排站,分別標上14,13,。。。1號,並分別給它們灌上對應號碼的混合液。24小時過去了,過來驗屍吧:

  • 第四步

    從左到右,死了的小白鼠貼上標籤1,沒死的貼上0,最後得到一個序號,把這個序號換成10進位制的數字,就是有毒的那瓶水的編號。