1. 程式人生 > >12硬幣中有一個不知道輕重的假幣,用天平將它找出來

12硬幣中有一個不知道輕重的假幣,用天平將它找出來

    問題1:假設有8個硬幣,裡面有一個硬幣是假幣,並且知道它是重了還是輕了(假設是輕了),現在給你一個天平,要求用最小次數將這個硬幣找出來.      這時候可以用一種類似二分法的演算法來找出這個假幣.將左邊4個和右邊4個比較,因為知道硬幣是輕了,所以很快就能確定那堆硬幣裡面有假幣,這時候問題的規模由原來的8變成了4....然後對4個硬幣也採用同樣的辦法...最終3次找出那個假硬幣

問題2:問題1的升級版,這時候不再知道那個假幣是重了還是輕了,並且這時候還是12個硬幣規模

    對12個硬幣進行分

   然後第一次稱量:A堆和B堆

                                    如果A == B  那麼 無疑假硬幣無疑在C堆中   然後稱量    9  +10   和 7  + 8 .如果相等能夠確定假幣在11 或者12 中,如果不相等可以確定在9或者10中,接下來一次機會怎麼確定假幣的方法 你們可以想到吧。。。好的,這種情況可以解決掉了

                                  然後到了假設A!=B的情況 ,毫無疑問,任何稱量都可以看到哪一個堆是重了還是輕了,請記住這種情況,這是關鍵的關鍵(標記位***)。在A!=B情況下我們採取以下稱量計劃    (1) 第一次 1+2+6   和5+3+9  如果相等,那麼說明假幣無疑是在4  7 8 中,然後下一步我們稱量7和8,如果7和8相等,那麼說明假幣是4,如果7和8不相等,你們還記得那個最關鍵的關鍵的(***)沒有??7和8不相等,那麼說明A中全部都是真的,並且我們曾經稱量過A 和B得知過哪個重了,也就是意味著我們可以從曾經進行過的推算中猜測到哪個假幣是重了還是輕了,那麼如今你7和8不相等並且你推出了假幣是重了還是輕了,是不是就知道假幣是哪個了?

                                         (2)如果第一次1+2+6 和5+3 +9  不相等,這時候我們留意到參與稱量的硬幣9是真幣,記住第二個關鍵的關鍵,我們在這次測量中交換了一個A堆的3和B堆的6硬幣,(情況A)如果說因為這次交換導致了天平的平衡方向改變了,本來由大的變小的,小的變大了之類的,那麼我們毫無疑問能夠確定假幣在3或者6之中,接下來最後一次如何在兩個硬幣中確定是哪個假幣你們能想到吧?還有一個(情況B)如果說因為這次交換導致了天平的平衡方向改變了,本來由大的依然是大的,小的依然是小的之類的,這時候我們能夠確定到假幣是在1 2 5 中,你們注意到之前是否也分析過類似的?你們注意一下上面提到的關鍵的關進,也就是標記(***),就會知道如何類似的應用這個條件,去判斷假幣在哪個中了,,,,其實就是類似(1)的分析

問題3:8個硬幣,不知道輕了還是重了,三次稱量找出來。轉換成問題2一樣的問題


你們知道了吧,其實問題3就是問題2的一個子集,據說這個問題3是一個公司的面試題。目測估計是準備壓力面,這是最簡單的情況....