zoukankan      html  css  js  c++  java
  • 使用天平3次,从12个乒乓球找唯一1个轻重未知的废品

         前些天在知乎看到一个问如何鉴定程序员水平的问题,其中一个答主建议用智力题考验程序员解决问题的能力(我们在此不讨论答主的观点),然后就留了这么一个问题供大家思考。当时思考了一阵,没头绪(我真不是答主认为的优秀程序员╯□╰)就此放下了。恰好今天在看《控制论与科学方法论》这本书时,看到这本书对此题目的解答,但文中只给了第一步的推导,然后就同理了……然后我就纠结了N久,才把这个同理给想明白。下面把书中的解法和自己想明白的分享给大家。

         书中是使用控制能力来分析的(控制能力 = 原可能性空间大小 / 施加控制后可能性空间大小)。每个球都可能是废品中或轻或重两种状态,因此总的可能性空间大小是12×2=24个状态。目标是唯一的一个状态,因此要求控制能力为24/1=24。天平每次称量可确定左边重,右边重,两边同重3个状态中的一个,可能性空间缩小为原来1/3,因此天平控制能力为3,3次称量,总控制能力为3×3×3=27 > 24。所以此问题有解。

    设第一次称x个球,留y个球。若天平平衡,则废品在y个球中,则有

    2y/9 ≤1   (1)

    如果天平不平衡,则废品在x个球中。已知x/2个不会是轻的,x/2个不会是重的,所有的可能性空间为x,则有:

    x/9≤1   (2)

    x+y=12   (3)

    由此解的x=8,y=4。书中说用同样的方法就可以获得第二次第三次的具体解法了。这个“同样的方法”让我好生纠结,因为第二次情况更复杂了,具体该怎么求解呢?

          第一次称量两边平衡的情况很好想通,我们来考虑两边不平衡的情况。天平上比较轻的那一侧我们记为a,另一侧记为b。现在可以假设从a中拿a­­1个放入天平左边,a­­2个放入天平右边,留下a3个;从b中拿b­­1个放入天平左边,b2个放入天平右边,留下b3个。则有:

    a1+a2+a3=4   (4)

    b1+b2+b3=4   (5)

    a1+b1=a2+b2   (6)

    若天平平衡,则有:

    (a3+b3)/3≤1   (7)

    若天平不平衡且左边轻,则那a1和b1个球不可能是重的,又在第一步的称量中可知那b1个球不可能是轻的,所以可以判定那b1个球是正常的;而且a2和b2个球不可能是轻的,又在第一步的称量中可知那a2个球不可能是重的,所以可以判定那a2个球是正常的。此时剩下a1和b2个球待定。因此有:

    (a1+b2)/3≤1   (8)

    若天平不平衡且左边重,则同理有:

    (a2+b1)/3≤1   (9)

    根据(4)-(9)可以求得两组解a1=a2=1,a3=2;b1=b2=2,a3=1;与a1=a2=2,a3=1;b1=b2=1,a3=2。

          第三步就可以按同样的方法推得了。

          控制能力解决问题的视角真独特,自叹还是读书少啊。

    注:本文中给出的解后来发现并不全面,只是多个解中的一个。请参考评论18楼与21楼书中解答截图。

  • 相关阅读:
    【郑轻邀请赛 G】密室逃脱
    【郑轻邀请赛 C】DOBRI
    【郑轻邀请赛 F】 Tmk吃汤饭
    【郑轻邀请赛 I】这里是天堂!
    【郑轻邀请赛 B】base64解密
    【郑轻邀请赛 A】tmk射气球
    【郑轻邀请赛 H】 维克兹的进制转换
    解决adb command not found以及sdk环境配置
    adb shell 命令详解,android, adb logcat
    Unexpected exception 'Cannot run program ... error=2, No such file or directory' ... adb'
  • 原文地址:https://www.cnblogs.com/szhx/p/4782203.html
Copyright © 2011-2022 走看看