筆試題目碰到了天平稱球的問題,之前遇到沒有細細的查閱資料,再次筆試的時候就吃虧了,這裡記錄下結論:
現有n個小球,其中有乙個壞球不知比標準球輕還是重。我們令h=。
1)要保證在n個球中找出壞球並知道其輕重,至少需要稱h次。
假設n≠2,我們有
2)如果n<(3h-1)/2,那麼稱h次就足夠了;
3)如果n=(3h-1)/2,那麼稱h次足以保證找到壞球,但不足以保證知道壞球比標準球輕還是重;
4)如果n=(3h-1)/2,而且還另有乙個標準球,那麼稱h次足以保證找到壞球和知道,知道壞球比標準球輕還是重。
假設n=2,我們有
5)如果還另有乙個標準球,稱h==2次足以保證找到壞球和知道壞球比標準球輕還是重。
5)看起來有點奇怪,不過這其實很顯然。如果有超過兩個球,我們知道壞球是「獨一無二」的那乙個,總找得出來;但是如果只有兩個球,乙個好球乙個壞球,都是「獨一無二」的,如果沒有乙個標準球的話,我們無論如何不可能知道哪個才是好的。
一般地,能由h次稱量找出壞球並知道其輕重的最大小球數量為
(3h-1)/2-1 = (3h-3)/2;
能由h次稱量找出壞球但不需要知道其輕重的最大小球數量為
(3h-1)/2;
有一標準球,能由h次稱量找出壞球並知道其輕重的最大小球數量也為
(3h-1)/2。
為了比如說為了找出壞球並知道其輕重,則3次最多可以稱12個,4次為39個,5次為120個,6次為363個等等;為了找出壞球卻不需知道其輕重,則3次最多可以稱13個,4次為40個,5次121個,6次364個等等——但是如果另有乙個標準球,那麼就可以用相同的次數來知道壞球的輕重。
過程構造演算法:
編碼:
知道了球數,就能算出需要稱量幾次;
以這個次數作為長度,使用0、1、2排列組合進行編碼,如001021、212022等等,再去掉全0、全1和全2,可知一共有個編碼;
如果在乙個編碼中,第一處相鄰數字不同的情況是01、12或20,則我們稱它為正序碼,如1120021;
否則為逆序碼,如2221012;
在長度為n的編碼中,正序碼和逆序碼的數量相等,均為個。
賦值: 如果把乙個正序碼中的0換成1,1換成2,2換成0,則它仍然是正序碼;
根據這個原理,我們把所有正序碼按3個3個進行分組,如12001、20112、01220這3個就是一組;
把正序碼一組一組地分配給小球,每球乙個,直到分完;
然後把每個正序碼的0換成2,2換成0,它就變成了乙個逆序碼,如12001變成10221;
這樣,每個小球就有了兩個編碼,乙個正序,乙個逆序,而且所有球都不重複。
稱重: 第一輪,我們把所有正序碼第一位為0的小球放在天平左側,為2的小球放在右側,其它的放在旁邊;
如果天平左傾,記為0;右傾,記為2;平衡,記為1;
然後是第二輪,把第二位為0的小球放在左側,為2的放在右側,同樣記下稱量結果;
每一輪都按這個順序進行,一共要稱n次,最終結果是個n位的編碼;
如果編碼等於某個小球的正序碼,則這個小球比其它球重;
如果編碼等於某個小球的逆序碼,則這個小球比其它球輕。
**於:稱球問題——經典智力題推而廣之三
參考:小球稱重問題:用天平稱量幾次才能找到有問題的球?
天平稱球問題
筆試題目碰到了天平稱球的問題,之前遇到沒有細細的查閱資料,再次筆試的時候就吃虧了,這裡記錄下結論 現有n個小球,其中有乙個壞球不知比標準球輕還是重。我們令h 1 要保證在n個球中找出壞球並知道其輕重,至少需要稱h次。假設n 2,我們有 2 如果n 3h 1 2,那麼稱h次就足夠了 3 如果n 3h ...
面試智力題 天平稱球
題目 現有12個球,其中有乙個球和其他的球重量不一樣,但是外形還是一樣的,現在要求你用乙個天平在只稱3次的情況下找出不一樣的這個球來?如果換成13個球那又怎麼樣呢?題目自己很早以前就看過,但是答案當時沒怎麼想出來,看過網上答案。剛才乙個同學在群上討論,發現自己還是通過網上找答案,沒有想出來。從網上找...
面試智力題 天平稱球
題目 現有12個球,其中有乙個球和其他的球重量不一樣,但是外形還是一樣的,現在要求你用乙個天平在只稱3次的情況下找出不一樣的這個球來?如果換成13個球那又怎麼樣呢?題目自己很早以前就看過,但是答案當時沒怎麼想出來,看過網上答案。剛才乙個同學在群上討論,發現自己還是通過網上找答案,沒有想出來。從網上找...