智力測驗 - 金幣問題 (三)
問題
有金幣六袋,每袋有 24 枚金幣,不知道有幾袋真幾袋假,真的金幣重 10 克,假的重 9 克。給你一個電子秤,只能秤重一次,就知道哪幾袋是假的?
提示
不是天秤,這可以秤出重量。
解法
在上一篇我們透過二進位的方式可以辨別,但是在第六袋的時候必須要取出 32 枚金幣,超出題目限制的 24 枚金幣,所以不能使用二進位方式解,因此這裡採用另一種方式來取。
在此之前我們先將問題簡化,來說明這個方法的意涵,現在將題目改成只有兩袋金幣,然後我們先從一個袋子取出 24 枚,另一個取出 23 枚。這邊我們可以很容易知道如果比預期少 24 克表示第一袋金幣是假的、23 克則為第二袋或者 47 克則兩袋都是假的。
如果改成三袋金幣,則分別取出 24、23 和 22 枚。這時兩袋為假的情況就變得複雜,24 + 23 = 47 或 24 + 22 = 46 或 23 + 22 = 45,目前為止可以分辨。
如果改成四袋金幣,則分別取出 24、23、22 和 21 枚。這時除了之前的 24 + 23 = 47 或 24 + 22 = 46 或 23 + 22 = 45,又多出了其他可能性,然後我們會發現 24 + 21 = 45,會 和23 + 22 = 45 重複造成混淆無法分辨,故此時不取 21 枚。
基本上找出每袋要取出的金幣數目為目標,但依照上面的方式找速度很慢,以下為這個方法的精神結合數學的方式,能夠加快找到答案的速度。
由於全為真一定可以辨別,所以以下不列出考慮,這邊直接從取兩袋金幣開始:
步驟一
1 | 一袋為假 = 24, 23 |
步驟二
1 | 一袋為假 = 24, 23, X |
第三袋要取的金幣數假設為 X,為了避免在兩袋為假的情況下出現也是 47 的組合,所以我們希望 X 產生的組合會是 46,所以我們和最大的數字相減:
1 | X = 46 - 24 = 22 |
接著將 22 填回去會得到
1 | 一袋為假 = 24, 23, 22 |
填回去同時更新資料,而我們只需要關注邊界的值即可,所以中間的部分可以忽略不管。
步驟三
1 | 一袋為假 = 24, 23, 22, X |
到了第四袋時,除了兩袋為假還多出了三袋為假的情況要考慮,不過實際上我們可用同樣的方式去找,相減的時則是和上一層最大值相減。
1 | X = 44 - 24 = 20 |
這時候我們發現出現兩個不同值,我們取最小值 20,更新資料:
1 | 一袋為假 = 24, 23, 22, 20 |
之後利用同樣的方式即可找出全部要取得數量
步驟四
1 | 一袋為假 = 24, 23, 22, 20, X |
更新
1 | 一袋為假 = 24, 23, 22, 20, 17 |
步驟五
1 | 一袋為假 = 24, 23, 22, 20, 17, X |
所以最後答案就是取出 24, 23, 22, 20, 17, 11 去秤重即可。
那麼有沒有辦法辨別 7 袋金幣呢?我們在繼續往下找看看。
1 | 一袋為假 = 24, 23, 22, 20, 17, 11, X |
我們發現出現取 0 的情況,表示沒有辦法辨別更多袋金幣,所以 24 枚金幣最多就只能辨別 6 袋。
延伸閱讀
上一篇 智力測驗 - 金幣問題 (二)