阅读更多
13只大小相同的球,其中一只 球与其他的12只球质量不一样,可能比其他球重,也可能比其他球轻。现有一只没有砝码的天平,天平只可以使用3次,如何利用天平找出这只质量与其他球不同的球?
下面是我写的机器人,可以在N个球中寻找这个异重球,是用javascript实现的。
http://www.lightmtv.org/minibot/minibot.html
此题的正解:
第一步:天平左侧: 1, 2, 3, 4 ,天平右侧:
5, 6, 7, 8
情况A:平衡,则说明异重球在,9,10,11,12,13中
第A2步:天平左侧: 9, 10 ,天平右侧: 1, 11
情况AA:平衡,则说明异重球在12,13中
第AA3步:天平左侧: 12,天平右侧: 1
情况AAA:平衡,则说明异重球为13号球。
情况AAB:不平衡,则说明异重球为12号球,且可知此球相对是重是轻。
情况AB:左重右轻,则说明可能是9,10中一球重,或11轻。
第AB3步:天平左侧: 9,天平右侧: 10
情况ABA:平衡,则说明11号球轻。
情况ABB:左重右轻,则9号球为重球
情况ABC:右重左轻,则10号球为重球、
情况AC:右重左轻,与AB同
情况B:左重右轻,则说明可能是1,2,3,4中一球重,或5,6,7,8中一球轻
天平右侧:
2, 7, 8
情况BA:平衡,则说明可能是3,4中一球重
重侧为异重球,且此球为重球。平衡则无解。
情况BC:右重左轻,与情况BB同
解题过程:当我想要编写算法在N个球中寻找异重球时,开始是茫然,不知道如何下手,但当我想到的一些状态后,就有了思路,这些状态是,天平的左倾,右倾,平衡,球是可能重,可能轻,未知,标准重量,这些状态都需要被表示,被记录。每个球的初始状态都是未知,在解题的过程中都会重新计算他的状态。因此需要一个函数,根据天平的状态来计算球的可能状态。然后需要思考的是最重要的问题,写一个函数,根据球的状态来决定将哪些球放在左边,哪些球放在右边,简单的说是将目标球分成3份。