Java演算法面試題(009) 毒酒問題
介紹
1000桶酒,其中1桶有毒。用小老鼠做實驗,一旦吃了有毒的酒,一週後小老鼠毒性就會發作而亡。問如何在最短的時間內用最少的老鼠找到那桶有毒的酒?
思路一
將現有的酒分成兩組,分別將兩組酒混合後餵給兩隻老鼠,1周以後即能分出哪組裡存在毒酒;依次類推的話。
2的10次方為1024,因此進行10次迭代操作,即可找到那桶毒酒。總計使用20只老鼠,10周時間找到毒酒桶。
這個估計大部分程式設計師都能想到的方案,但這個不是最佳的方案。
思路二
給現有的桶按1-1000的編號,最大編號為1000,其二進位制表示11 1110 1000,共10位。我們使用10只老鼠,編號分別為:
第01只 00 0000 0001
第02只 00 0000 0010
第03只 00 0000 0100
第04只 00 0000 1000
第05只 00 0001 0000
第06只 00 0010 0000
第07只 00 0100 0000
第08只 00 1000 0000
第09只 01 0000 0000
第10只 10 0000 0000
然後根據桶編號給相應的老鼠喂酒,如編號為100的酒桶,其二進位制表示為00 0110 0100,其中從左邊數第3、6、7位為1,取這桶中的酒餵給編號為3、6、7的老鼠,依次類推,將所有酒桶取酒餵給相應的老鼠。一週以後,根據死亡老鼠的編號,可以找出的酒桶,舉個例子:比如第1、2、3、4只老鼠死亡了,那麼表示的二進位制數為 00 0000 1111,轉換成10進製為15,因此可以推斷出編號為15的酒桶中的酒有毒。
這確實是一種比較精巧的解法,依據二進位制的表示,快速找到有問題的酒桶。
相關文章
- Java演算法面試題(006) 相遇問題(阿里)Java演算法面試題阿里
- Java演算法面試題(007) 蒙提霍爾問題(三門問題)Java演算法面試題
- java面試問題Java面試
- 【Java問題面試總結】Java面試
- Java面試必看二十問題Java面試
- google經典演算法面試題-雞蛋問題Go演算法面試題
- 【Java面試題】如何回答GC相關問題Java面試題GC
- 常見的Java面試問題Java面試
- 經典面試問題:12小球問題演算法(原始碼)面試演算法原始碼
- 演算法面試:陣列編碼面試問題演算法面試陣列
- Java面試常問的幾個問題Java面試
- 【計題04組01號】Java面試問答題Java面試
- Java面試必問面試題,你掌握了嗎?Java面試題
- 40個Java集合面試問題和答案,面試奇葩問題,你掌握了嗎?Java面試
- 面試常考演算法題之並查集問題面試演算法並查集
- Java 進階面試問題必備Java面試
- Java面試技巧之MySQL問題梳理Java面試MySql
- Java同步問題面試參考指南Java面試
- java面試題Java面試題
- 面試問題面試
- 052-009題解析
- 位元組面試演算法題-0,1揹包問題面試演算法
- 演算法問題基於蟻群演算法求解求解TSP問題(JAVA)演算法Java
- Java在演算法題中的輸入問題Java演算法
- 面試題:階乘問題面試題
- 演算法面試題演算法面試題
- 【面試】面試題之汽水空瓶子問題面試題
- java框架面試高頻問題(SpringMVC)Java框架面試SpringMVC
- Java面試常被問到的題目+解答Java面試
- 40個Java集合面試問題和答案Java面試
- JAVA面試題 java部分Java面試題
- Java面試之Java基礎問題答案口述整理Java面試
- 阿里JAVA開發面試常問問題總結阿里Java面試
- 面試反問問題面試
- 100道JAVA面試題+JAVA面試題參考答案Java面試題
- 好程式設計師分享:Java面試題常見問題程式設計師Java面試題
- Java演算法面試題(008) 字串反轉Java演算法面試題字串
- JavaScript 面試中常見演算法問題詳解JavaScript面試演算法