zoukankan      html  css  js  c++  java
  • 有趣的天平秤假币问题

    问题描述:

        有12枚硬币,其中有一枚是假币,但是不知道是重还是轻。现给定一架没有砝码的天枰,问至少需要多少次称量才能找到这枚硬币?如何证明给出的方案是最少次数?

    思路分析:

        我们首先想到的可能是将12枚硬币分成两堆,每堆6枚放到天枰上称量,这样的得到的结果一定是天枰是倾斜的。得不到任何其他信息,反而白白浪费了一次称量机会。因此第一次称量一定是选择一部分去称量,利用均分原理,天枰左边放一部分硬币,右边放一部分硬币,还剩下一部分硬币。从平均情况考虑,三部分中含有假币的概率是相等的。因此,第一次称量中,我们可以将12枚硬币分成3份,每份4枚硬币,记为甲、乙、丙

    取甲、乙放到天枰上称量,一共会出现3种情况:

    • 平衡:说明甲乙中都不会含有假币,则假币一定在丙中,记丙中的4枚硬币为A、B、C、D。(依然不能将4枚硬币分成2份!无意义!!)取A、B放到天枰上称量,则又会出现三种不同情况:
      • AB平衡:AB不可能为假币,一定在C、D中。
        • 取C与A量,若平衡,说明D是假币;若不平衡,说明C是假币。
      • A重/B重:A为假或B为假。取甲中任意一枚(真币)与A称量。若平说明B为假币,且假币轻;若依然A重,说明A为假币且假币重;
    • 左倾:说明假币在甲或乙中。分别记甲中四枚硬币为ABCD,乙中四枚硬币为EFGH,丙中四枚硬币为IJKL(都是真币)。取ABE和CDI称量,则会出现
      • 若ABE与CDI平衡,则说明他们都是真币。FGH为假币且假币轻。取FG称量:
        • 若平衡,说明H为假币;
        • 否则FG中谁轻谁是假币。
      • 若左倾(即ABE重,CDI轻)。第一次称时,ABCD>EFGH。所以假币在AB中,且假币重;
        • A与I在称量一次,若平则B是假币,若A重,则A是假币。
      • 若右倾(即ABE轻,CDI重)。第一次称时,ABCD>EFGH。所以假币在CD中,且假币重;
        • C与I再称量一次,若平则D是假币,若C重,则C是假币。
    • 右倾:(与左倾情况完全对称)

        通过上面的分析可知,无论什么情况,3次称量就可以得出哪个是假币。

        理论分析:

    • 一次天枰称量能够得到左倾、右倾、平衡3种情况,如果把一次称量当做是一次编码,则它是3进制编码才能够表示;
    • 我们想要用3进制编码表示的是:12枚硬币,且假币的轻重未知。
      • 每枚硬币都可能是假币,共12种情况,假币有可能比真币轻,也有可能重,共12*2=24种情况;
      • 3n>=24 则n至少为3才可以。
    • 所以从信息论的角度讲,3次称量是最小值。
  • 相关阅读:
    hdu 5387 Clock (模拟)
    CodeForces 300B Coach (并查集)
    hdu 3342 Legal or Not(拓扑排序)
    hdu 3853 LOOPS(概率DP)
    hdu 3076 ssworld VS DDD(概率dp)
    csu 1120 病毒(LICS 最长公共上升子序列)
    csu 1110 RMQ with Shifts (线段树单点更新)
    poj 1458 Common Subsequence(最大公共子序列)
    poj 2456 Aggressive cows (二分)
    HDU 1869 六度分离(floyd)
  • 原文地址:https://www.cnblogs.com/little-YTMM/p/5455072.html
Copyright © 2011-2022 走看看