天天看點

一道有趣的電路闆面試題,征求好的解法一、試題二、分析三、推理四、推理結果五、解題思路六、征求問題解法

一道有趣的電路闆面試題,征求好的解法

有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>

繼續閱讀