一道有趣的電路闆面試題,征求好的解法
有N塊電路闆,每個電路闆可以檢測别的電路闆是好還是壞,但不能檢測自己。好的電路闆能得出準确的結果,但壞的電路闆得到的結果就有可能是錯的。電路闆中好的比壞的要多。
請用最少的檢測次數,找出一塊好的電路闆的方法來,并說明的分析理由。
序号
測試結果
測試結果說明了要檢測的電路闆什麼
1
好的
是好的
2
壞的
是壞的
換句話說:
待檢查的電路闆本身就是
3
4
僅僅一種結果
好的,好的
下面四種結果中的一種:
壞的,壞的
壞的,好的
好的,壞的
也就是說,不可能出現測試結果,兩個都是好的情況。
1.都是好的;
2.都是壞的;
3.一個好的,一個壞的;
如果兩塊電闆闆互相檢查,如果得到的結果正好都是兩個好的,那麼,我們可以推理出:
兩塊電路闆,要麼都是好的,要麼都是壞的。
兩塊電路的測試結果是
測試結果說明了什麼
兩個好的
兩塊電路闆都是好的
兩塊電路闆都是壞的
要麼兩塊電路闆要麼全好,要麼全壞。
如果兩塊電闆闆互相檢查,如果得到的結果是一個是好的,還有一個是壞的,那麼,我們可以推理出:
一個好的,另一個是壞的
兩塊電路闆一個是好的,一個是壞的
說明至少有一塊電路闆是壞的。
如果兩塊電闆闆互相檢查,如果得到的結果:兩個都是壞的,那麼,我們可以推理出:
兩個都是壞的
兩塊電路闆要麼都是好的,要麼都是壞的。
至少有一塊電路闆是壞的。
用第一塊電路闆與餘下的N-1塊電路闆,兩兩測試,一旦測試結果第一次出現了:
有一個是壞的,不管另一個測試結果是好,是壞。
将其記錄下來;
一旦測試結果還出現了,有兩次的測試結果都是好的,就停止測試。
注意:如果循環了一遍,結果都沒有出現測試結果都是好的,說明第一塊電路闆,就是壞的。
先分别記錄
測試結果是兩個好的,兩塊電路闆名稱分别叫做A與B;
再分别記錄
測試結果是一個好的,一個是壞,兩塊的電路闆分别叫做C與D;
然後分别記錄
另一組測試結果是兩個好的,兩塊電路闆名稱分别叫做E與F;
接着A測試C,并且也測試D,
如果測試都為好的,可以斷定A與B都是壞的;
B測試C,并且也測試D,如果測試都是好的,可以斷定A與B都是壞的;
一旦确定了A與B都是壞的。
用E來測試A,
如果測試結果是好的,說明E也假的;
用E來測試B
用F來測試A,
如果測試結果是好的,說明F也假的;
用F來測試B,
注意:用E來測試A,
如果測試結果是壞的,并不能說明E就是好的電路闆。
如果是結果是好的,可以肯定這塊未知電路闆是壞的,将他放到壞的電路闆的一堆裡,或者數字組裡,或者叫添加到壞電路闆的集合裡;
如果測試結果是壞的,該塊電路闆好壞,不可确定,是未知;
然後用他來測試壞的電路闆裡集合裡的每一塊電路闆,隻要發現測試結果是好的,就可以肯定該電路闆,是壞的,可以添加到壞的電路闆集合中去。
原來以為很Easy,偶想了好半天,太頭疼了,都沒有一個好的解法,特此征求CSDN朋友各路英雄豪傑,有什麼好的算法。謝謝!
推薦擴充閱讀:
<a href="http://blog.csdn.net/littletigerat/article/details/7600372" target="_blank">《再次考考碼農們的想象能力》</a>