zoukankan      html  css  js  c++  java
  • 12称重

    8球称重:8个球,一球稍重,称两次找出来这个球。

    12球称重:12个球,有一个坏球(不知道是轻了还是重了),用天平称三次找出那个坏球。


    先看简单的8球。若一般常规思维来看这道题,4-4,2-2,1-1,明显需要称3次。题目说了只要两次,看来需要点非常规的思维了。

    5-5显然不行,试试3-3。
    (这里用A3表示前三个球,B3表示后三个球)
     

    A3=B3

    然后把剩下的两个直接相称,取重者即可。

    A3>B3(前三个较重)

    把前三个中取两个称重,若有较重者,可得。天平平衡则重球是第三球。(推论:当知道轻了还是重了的时候,3球可一次称出来)

    A3<B3(后三球较重)

    同上


    再来看12球,如果你试下常规思维的话,会发现对半的称量也是不可解的。

    5-5-2这样称的话,第三堆太少,第一次相等还好。若不相等,可能是前5个重了,也可能是后5个轻了,这时只有两个正常的,两次很难判断。
    能够多想一点的话,会发现4-4-4是个有趣的划分。

    若A4=B4:则坏球一定在C4里。这时取C中三个和A中三个称,即可知道坏球到底是重了还是轻了。根据8球已得出来的结论,当知道轻了还是重了的时候,3球可一次称出来。

    若A4>B4:那么问题就变成了从8个球中找出来那个坏球。关键是不知道坏球是重了还是轻了,倘若知道的话,直接套用上一题就行了。

    那么第二次需要称几个球呢?
    首先试3-3称的话,左右两边该怎么放球呢?如果还是左边A3,右边B3的话,显然两次是称不出来的。那么就必须掺开了,也就说一边既有A的也有B的,这样才可能称出来。试试a1 a2 b1---b2 b3 a3,如果前者大于后者的话a1,a2重了或是b2,b3轻了,同时b1和a3一定是正常的(A4>B4)。再用一次的机会找出是a1,a2,a4 重了或是b2,b3,b4轻了的一个显然是不可能。这时我们会发觉其实可能并不是我们在3-3称的左右两个怎么放的问题,很可能是本身3-3的问题,因为本身3-3称的话包含的信息的太少了,而且对于C的4个正常的,我们或许可以用到。


    试试5-5的情况,这时两边的球怎么放可能会是我们考虑重要问题,因为毕竟称量用的球多了嘛。
    先来a1 a2 a3 b1 b2---c1 c2 c3 c4 b3 若前者大于后者,则是a1,a2,a3重了或是b3轻了,下一步看来也无法称出来(左边信息过少)。若前者后者小于后者的话,那么b1,b2轻了,下一步很容易便称出来了。这时会不会发觉第三步称出来的太简单了,前面都是最后三个球一次称出来了(右边信息多了)。
    所以我们可以考虑将右边的信息向左移动点,也就是把右边确定的往左,左边不确定的往右。
    a1 a2 c1 b1 b2--- c2 c3 c4 a3 b3,如果前者大于后者,则是a1,a2重了或是b3轻了,这时第三次称a1,a2就可以了。
    如果前者小于后者,则是a3 重了或是b1 b2轻了,第三次称b1,b2就可得了。
    A4>B4同理可得。

    本文致力于寻找一种可行的逻辑思维,分析中可能存在疏漏还请大家指教。注意一点在12球5-5分怎么放球时由于怎么放的可能性很多,所以建议不要瞎试,尝试着分析一种情况后调整。


    经常看到有人拿信息论来解决这些有趣的问题,而且简单明了,给人人启示,这里就有篇文章数学之美番外篇:快排为什么那样快

  • 相关阅读:
    Javascript在使用import 与export 区别及使用
    【repost】Python正则表达式
    js常见算法
    【repost】 JS变量重复声明以及忽略var 声明的问题及其背后的原理
    【repost】javascript callback
    【repost】js window对象属性和方法相关资料整理
    Donald Knuth
    前端知识体系
    【repost】让你一句话理解闭包(简单易懂)
    【repost】图解Javascript上下文与作用域
  • 原文地址:https://www.cnblogs.com/dmesg/p/1536984.html
Copyright © 2011-2022 走看看