前些天在知乎看到一个问如何鉴定程序员水平的问题,其中一个答主建议用智力题考验程序员解决问题的能力(咱们在此不讨论答主的观点),而后就留了这么一个问题供你们思考。当时思考了一阵,没头绪(我真不是答主认为的优秀程序员╯□╰)就此放下了。刚好今天在看《控制论与科学方法论》这本书时,看到这本书对此题目的解答,但文中只给了第一步的推导,而后就同理了……而后我就纠结了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中拿a1个放入天平左边,a2个放入天平右边,留下a3个;从b中拿b1个放入天平左边,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楼书中解答截图。