大航海时代吧 关注:77,198贴子:1,001,079

大航海时代3迷你游戏之5 硬币游戏:13个金币用天平称3次

只看楼主收藏回复

大航海时代3中有个迷你游戏叫“硬币游戏”,游戏给出9至13个金币要求用天平称三次,找出唯一一个重量不同的金币。这纯粹就是一个数学题,网上可以搜索到类似的比如13个小球称重的解法,但是遗憾的是,很少有9~13个都适用的通用解法,以及详尽的分支图,有些解法甚至是错误的。所以我只好自己动手解一回了。


IP属地:浙江1楼2020-01-21 22:44回复
    我们回到大航海时代3的硬币游戏。

    界面上有三个按键,功能分别是这样的:
    WEIGH:称重,注意天平两边金币数量应保持一样
    CLEAR:清除,不管放了多少个金币在天平两端,按下这个按键就都清除了,方便重新放
    DECIDE:决定,按下这个按键,然后选择一个金币,那不管你之前称没称过,这个金币都被系统认为是你选中的那个重量不同的金币,如果选择错误,则显示“挑错金币。天平倾斜”
    基本思路:
    由于重量不同的金币是唯一的,但是不知道轻重,通过天平称重需要区分13(金币数量)×2(重或轻2种状态)=26种不同情况,每一次称重时天平有3种状态,平衡、左重右轻、左轻右重,称重3次,会出现27种可能的组合,我们可以把这27种可能看成3位的3进制数,或者看成编码,理论上组织恰当的话,应该能标识出26种不同情况。
    接下来,第一次称重很关键,如果左右各放3个金币恰巧天平平衡,那么剩下7个金币14种状态,而剩下称重2次最多只能区分9种情况,显然会导致失败,左右少于3个就更不行了。那是不是第一次称重越多越好呢,也不是,比如左右各放5个金币,恰巧左边重或者右边重,标准硬币只有3个,结果都是需要在剩下2次称重中区分10种情况(重的一边5个中有1个金币重了,或者轻的一边5个中有1个轻了),显然也会导致失败,左右各放6个就更不行了。
    第一次称重合适的数量,看来只剩下左右各放4个金币了。当然如果总数不是13,选择余地会相应增加,只有9个金币的称法就可以任性很多。


    IP属地:浙江2楼2020-01-21 22:47
    回复
      2026-02-07 04:35:18
      广告
      不感兴趣
      开通SVIP免广告
      通用解法,以13个金币为例,适用于9~13个金币的情形,在这里我先把判断分支的图给出,这就一目了然了。

      上面给出的图中,序号为红色的金币为前面称重时确定的标准重量金币。
      以下为详细解说:
      给13个金币依次编号①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬,如果天平平衡,用=表示,如果天平左重右轻,用>表示,反之则是<。
      一、第一次称重,当①②③④=⑤⑥⑦⑧时,得到的信息为①②③④⑤⑥⑦⑧为标准重量金币,那个重量不同的金币在⑨⑩⑪⑫⑬中,第二次称重选择①⑪与⑨⑩进行比较,其中①为标准重量金币
      1、如果①⑪=⑨⑩,那么重量不同的唯一金币就在⑫⑬,把⑫⑬其中的一个与标准重量金币比较,就能得到结果,但这里有个小小的遗憾,就是如果恰巧第三次称重时①=⑫,那么我们就只能知道那个重量不同是的⑬,却不知道⑬到底是重了还是轻了,第三次称重用①和⑬也会有同样情况。
      2、如果①⑪>⑨⑩,或者⑨<⑩,那么第三次称重只要比较⑨和⑩就能知道结果。
      二、第一次称重,当①②③④>⑤⑥⑦⑧时,得到的信息为⑨⑩⑪⑫⑬为标准重量金币,那个重量不同的金币在①②③④⑤⑥⑦⑧中,第二次称重,左边去掉1个、右边去掉2个、左右再交换1对的位置,比如第二次称重中③④⑤为一组与②⑥⑨进行比较。
      1、③④⑤=②⑥⑨时,重量不同的金币在剩下的①⑦⑧中,第三次称重只要比较第一次称重时在同侧的⑦和⑧就能知道结果。
      2、③④⑤>②⑥⑨时,与第一次称重比较,第二次交换金币后左重右轻的情况没有改变,说明交换过位置的金币②⑤是标准重量的,重量不同的金币在③④⑥中,比较前两次称重时都在同侧的③和④就能知道结果。
      3、③④⑤<②⑥⑨,与第一次称重比较,第二次交换金币后称重左重右轻变为左轻右重,说明重量不同的金币在交换过位置的②⑤中,用标准金币⑨来比较其中一个就能知道结果,比如用⑨与②进行比较,如果⑨=②,则说明⑤是那个重量不同的金币,并且重量较标准为轻,如果⑨≠②,那②就是重量不同的金币,并且⑨<②,因为根据③④⑤<②⑥⑨判断,既然②为重量不同金币,那③④⑤⑥和⑨同为标准重量金币,不可能存在⑨>②的情况。
      二、第一次称重,当①②③④<⑤⑥⑦⑧时,情况与①②③④>⑤⑥⑦⑧相似,不再赘述。


      IP属地:浙江3楼2020-01-21 22:48
      收起回复
        几个实例:




        IP属地:浙江4楼2020-01-21 22:51
        回复
          事实上如果不以追求通用为目标,每一种特定数量的金币,都可以有自己专用的解法,比如13个金币也可以用下图中的解法得到结果。其他数量不再赘述,请自行设计。

          最后给大家留一个问题,上述2种关于13个金币的解法,都有一个分支或者说都有概率出现只知道某个金币重量不同但却不知道它比标准重量是重了还是轻了的情况,那么有没有一种称法可以做到13个金币全部都能确定重量比标准的重了或者轻了呢?


          IP属地:浙江5楼2020-01-21 22:52
          回复
            数学你好数学再见,不答


            IP属地:四川6楼2020-01-22 09:47
            回复
              学到了,比我的方法好


              IP属地:江西7楼2020-01-22 14:18
              回复
                @eve_compass
                老康信人也!这么快就出了正版,佩服。我也整理了一下自己的思路,冒昧发在这里,和你讨论也请你指正。
                思路基于以下事实:
                1、若干金币的集合,其整体轻重属性与其中特殊金币的轻重属性,在天平上的呈现形式一致。
                这话怎么理解呢?通俗讲就是,一只老鼠一锅汤,老鼠什么味儿,汤就什么味儿。一枚金币为轻(重),那么和它一拨儿的金币也就集体呈现为轻(重)。
                2、如果我们用天平称量过一次金币,那么在第二次称量的时候,与第一次相对照,被称量的金币事实上获得了某些有别于其他金币的附加属性,可以利用这些附加属性将金币细分为若干组。比如
                保留组:天平两边没有挪窝儿的金币;
                交换组:从左边挪到了右边,或者右边挪到了左边;
                移除组:从天平上取下的金币,没有参与第二次称量。
                3、如果已经知道特殊金币在天平上的呈现形式,并且能判定特殊金币为某三枚金币(包括两枚)其中之一,那么只需天平称一次,就能确定该特殊金币。
                这个应该不难理解。天平两头各一枚金币,如果不平衡,那么比对一下已经知道的特殊金币呈现形式,相一致的就是要找的目标;如果平衡,那么没上天平称的那个就是目标。
                这一判定过程因为需要多次调用,我们不妨将其理解为一段子程序,并命名为“三枚金币称一次,即可确定目标”。
                基于以上事实采取如下步骤:(9-13枚金币均适用)
                第一步、天平两端各放4枚金币;
                在这一步我们的目的是建立某种呈现形式,从而为以后的判断提供一个基本盘,特殊金币或轻或重、不轻不重、亦轻亦重并不影响,有点儿像姓薛的那只猫。
                那么为什么是各4枚金币,而不是5枚或者3枚呢?因为我们接下来要对放上天平的金币按照“保留”“交换”“移除”的属性进行细分,并且调用“三枚金币称一次,即可确定目标”这个子程序,如果是两端各5枚金币的话,其中9枚可细分,另外1枚就无处可去了……如果是两端各3枚金币的话,那么会导致较多金币在第一次称量的时候没有得到上天平呈现的机会,这在金币总数较少比如9的时候影响不大,但在金币总数较多比如13的时候则会导致任务失败。
                这一步如果天平平衡,那么后续判断相对简单,后文结合实例了解一下即可。为了叙述的连贯性,在此我们设定天平呈现不平衡状态。
                第二步、移除2枚金币,天平两头保留2+1枚金币,交换剩余的1+2枚金币;
                如果天平保持此前的不平衡状态,可判定特殊金币在“保留”组;
                如果天平此前的不平衡状态逆转,可判定特殊金币在“交换”组;
                如果天平由不平衡状态转为平衡,可判定特殊金币在“移除”组。
                第三步、调用子程序。


                IP属地:四川9楼2020-01-22 23:58
                收起回复
                  2026-02-07 04:29:18
                  广告
                  不感兴趣
                  开通SVIP免广告
                  实际操作:
                  以下实例中,金币编号1-13,其中1、2、5保留,3、4、6交换,7、8移除。

                  第二步之后天平失衡状态不变,特殊金币在保留组——》保留组中1、2平衡——》5号为特殊金币且属性为轻。

                  第二步之后天平失衡状态逆转,特殊金币在交换组——》交换组中4比3重——》4号为特殊金币且属性为重。

                  第二步之后天平失衡转为平衡,特殊金币在移除组——》移除组中8比7重——》8号为特殊金币且属性为重。

                  第一步天平平衡,从剩余金币中选择9、10、11搭配1枚标准金币进行第二步称量,如果失衡即可调用子程序进行第三步称量。但在本例中第二步称量再次平衡,选择12号与标准金币进行第三次称量。12号比1号轻——》12号为特殊金币且属性为轻。
                  这里需要注意,如果第三步天平仍然平衡,我们虽然可以判定13号为特殊金币但无法确定其轻重属性。呵呵老康你看,我也撞到你说的遗憾啦。
                  出现“三连平”的情况,意味着我们无法获得特殊金币在天平上的呈现形式……姓薛的猫处于黑箱状态……也就无法调用子程序进行甄别。遇到这种情况的朋友不妨考虑一下彩票……
                  另外这种特殊情况或许可以解释另一个问题:为什么硬币游戏范围是9-13枚?14枚不行吗?我个人的理解,总数超过13枚遇到“三连平”将导致无法判定特殊金币。细致的数理逻辑俺可搞不定,就不献丑了。
                  以上。


                  IP属地:四川11楼2020-01-23 01:01
                  回复
                    两个思路考虑通用解法:
                    一是9~13都可以表示为8+n,把8的解法找到,通用解法也就找到。老康在3楼就是做的这个工作,很棒。
                    二是更通用一点的:
                    1、假如已知特殊金币是轻还是重,可以使用经典的三分法;
                    2、当每一步待测个数不是3的倍数时,可使用“补齐三分法”,即使用普通金币补充成3的倍数;
                    3、补齐过程对于测试流程来说是效率降低的,但提供了额外的信息量;
                    4、由于不知特殊金币是轻还是重,测试过程需要额外的信息,所以效率很难达到理论上限。
                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                    所以基本流程是:
                    a、待测个数为x,补齐为3n;
                    b、补齐测量时遵循信息量最大原则;
                    c、信息量足够时,挑选出n为下一步待测个数,信息量不够时,挑选出2n为下一步待测个数。
                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                    9个金币时,如果运气好是可以2次搞定的。达到了效率上限,也没获得额外信息,即老康说的,不知是轻是重。


                    IP属地:浙江12楼2020-01-24 01:10
                    收起回复
                      这个游戏怎么这么烧脑


                      IP属地:菲律宾来自Android客户端13楼2020-01-24 08:42
                      回复
                        通用解法来啦!!!@eve_compass
                        感谢@inpassport 的启发!!
                        ~~~~~~~~~~~~~~~~
                        一、名词解释:
                        标准币:重量正常的金币;
                        异常币:重量不正常的金币,异常币是唯一 ,可能偏重,也可能偏轻;
                        真重:异常币的一种状态,比标准币偏重;
                        真轻:异常币的一种状态,比标准币偏轻;
                        疑重:当两组金币上天平称量发生偏转时,显示重的一组金币全部标记为疑重;
                        疑轻:当两组金币上天平称量发生偏转时,显示轻的一组金币全部标记为疑轻;
                        未知:无法分辨重量状态的金币为未知;
                        标记色:利用颜色来标记金币的重量状态,未知(白),真重(红),疑重(红),真轻(蓝),疑轻(蓝),标准(绿)。
                        二、基本原理
                        因为有且只有一个异常币(以偏重为例),所以当异常币上天平称量时,该异常币会一直始终表现为疑重。
                        相对应的,如果一个金币在不同次称量中,即表现为疑重,又表现为疑轻,那该金币一定不是异常币。
                        三、操作流程
                        1、分组数量
                        将所有球分成3个组,有3种情形:
                        n,n,n
                        n,n,n-1
                        n,n,n+1
                        前两组上天平。
                        2、分组标记色
                        将所有球按标记色排序。
                        某色总数是偶数时,均分到第一组和第二组。
                        某色总数是奇数时,分出一个到第三组,其余均分到第一组和第二组。
                        第一组和第二组放满后,剩余的分到第三组。
                        例如:
                        A(红)、B(红)、C(红)、D(红)、E(蓝)、F(蓝)、G(蓝)、H(蓝)
                        分配后为
                        第一组:A(红)、B(红)、E(蓝)
                        第二组:C(红)、D(红)、F(蓝)
                        第三组:G(蓝)、H(蓝)
                        3、上天平称量
                        当天平未发生偏离时,上天平的所有金币为标准币(绿),舍弃。
                        当天平发生偏离时,显示重的一组金币全部标记为疑重(红),显示轻的一组金币全部标记为疑轻(蓝),历次称量中被标记为红+蓝的金币为标准币(绿),舍弃。
                        4、结束判定
                        当剩余金币数量大于3时,继续执行流程1。
                        当剩余金币数量小于等于3时,按以下执行:
                        3个:选2个同色上天平,不偏离时剩余1个异常,偏离时判断金币颜色;
                        2个:任选1个再加1个标准币上天平,不偏离时剩余1个异常,偏离时上天平的异常。
                        注:3个白色时,可能会需要二次判定。


                        IP属地:浙江16楼2020-01-26 13:07
                        收起回复
                          大佬你网盘上分亨的三国系列的下载地址怎么没有了?


                          来自Android客户端18楼2020-03-02 21:49
                          收起回复