1. 程式人生 > >【Java資料結構與演算法】| 陣列--天平稱量問題

【Java資料結構與演算法】| 陣列--天平稱量問題

天平稱量問題

題目:

有12枚硬幣,其中有1枚是假幣,但不知道是重是輕。現給定衣架沒有砝碼的天平,問至少需要多少次稱量才能找到這枚硬幣?

思考:

如何證明某個方案是最少次數?

解析:

隨機將12枚硬幣等分成3份,每份4枚;標記為A,B,C三份。將A放在左側,B放在右側,用天平稱量A和B,分三種情況:

1、天平平衡
2、A(左)比B(右)重
3、A(左)比B(右)輕(這兩種情況一樣的)

分析:

1、天平平衡

  • 天平平衡,說明A、B中都沒有假幣,假幣在C中,將C中的4枚編號為甲乙丙丁
  • 取甲乙用天平稱量,若平衡,說明甲乙是真幣,丙丁有一枚是假幣。
  • 取甲丙用天平稱量,若不平衡,說明丙是假幣;若平衡,說明丙是真幣,丁是假幣。

2、A比B重

  • 說明假幣必然在A、B中,C中的4枚都是真幣。將A中4枚硬幣編號為1234,B中編號為5678,C中編號為甲乙丙丁。
  • 選125放於左側,34甲放於右側;
  • 天平有三種情況:
    • 天平平衡:說明678含假幣,且假幣輕
    • 125比34甲重 說明12含假幣,且假幣重
    • 125比34甲輕 說明34含假幣,且假幣重 或者5是假幣,且假幣輕
  • 無論如何,最多再一次稱量就可得到假幣

3、理論下界
4、再次思考

程式碼: