weight的固定搭配
 
 12个球称3次出次品的问题
天宇 发表于 2007-7-29 6:57:00
          题目:12个球,已知其中有一个球为次品,但是不清楚是轻还是种,现手头有一架天平,要求只能称三次,出那个次品的球.
        乍看起来,好象没什么难度,仔细一琢磨,还满费了不少事,下面是解决的办法:
       
        第一次称:
        12345678,(abcd先不理)
若两边平衡,则再称两次即可判别(步骤:略),现在讨论不平衡的情况。
若左重,右轻(若左轻右重,解法同理):
(此时判定abcd四球是正常的球!) 
         第二次称: 
         12536a
一:若平衡,则排除12356,而abcd第一次称已经被排除,故只有两种可能性:4就是所的球而且是比正常球稍重的;或者78两球其中一球是要的而且是比正常球稍轻的。故再称第三次即可判别!
二:若左重,右轻,即有两种可能性:所的球为稍重的而且为12其中一个,或者6为所的球而且是稍轻的(因为3是第一次称时左边的,而a是正常的,故可排除!),于是,再称第三次即可判别!
三:若左轻,右重,即有两种可能性:所的球为5而且是稍轻的(因为第一次称时只有56是右边的);或者所的球为3而且为稍重的(因为第一次只有123在左边,而a又是正常的),于是,再称第三次即可判别.
        在网络上还到了一个强人写的程序流程:
现在把12个球随机分成3:
A[a1,a2,a3,a4],B[b1,b2,b3,b4],C[c1,c2,c3,c4]
A组与B组进行秤重
Case1:Weight(A)=Weight(B)
        说明有问题的球在C,同时说明A,B组中的球是ok的。
          现在取C组中的三个球组成D组,与A,B组中取三个正常球组成E组进行比较。
          if Weight(D) = Weight(E)
                {
                    说明D-C(C组剩下的那个球)是异常球,拿一个正常球
                与它秤一下就知道是轻球还是重球
                }
          else if Weight(D) > Weight(E)
                {
                    说明异常球在D组中且是个重球
                     D组中的两个球进行比较,结果出来了 
                 }
          else if Weight(D) > Weight(E)
                {
                    说明异常球在D组中且是个重球
                     D组中的两个球进行比较,结果出来了 
                 }
          else if Weight(D) < Weight(E)
                {
                    说明异常球在D组中且是个轻球
                     D组中的两个球进行比较,结果出来了 
                 }
Case2:Weight(A) > Weight(B)
          B中的两个球+A中的一个球组成D组,
          D(3个球)B'(B中剩下的两个球+一个正常球)进行比较(一定要是与
          B'组比,因为它包含了B组中剩下的两个球)
          if Weight(D) = Weight(B')
          {
                说明B',D组中的球都是正常的,同时原来的B组全是正常球
                根据第一次秤Weight(A) > Weight(B),说明不正常的的球在
                A组剩下来的两个球中而且是重球
              把剩下两个球秤一下,结果出来了
          }
        else  if Weight(D) > Weight(B')
        {
              D组:B中两个球+A中一个球
              B'组:B中两个球+一个正常球
              Weight(A) > Weight(B)
              Weight(D) > Weight(B')
               
                由于Weight(A) > Weight(B),所以如果A中如果有问题球只可能是重球
                B中有问题球只能是轻球
                Weight(D) > Weight(B')说明问题球就在D,B'组中 
                 由于B中只能是轻球,所以D组中的那两个B组的球是正常球
                             
                如果有问题的球是轻球,那么它就在B'组中的B的两个球
              如果球是重球,那么它一定就是D组中的那个A中的球
               B'组中的两个球秤一下,如果一样,说明问题球是D组中的A中的球,
                且是轻球
                如果重量不一样,重的那个就是问题球,且是重球
        }
        else  if Weight(D) < Weight(B')
        {
               D组:B中两个球+A中一个球
              B'组:B中两个球+一个正常球
              Weight(A) > Weight(B)
              Weight(D) < Weight(B') 
 
              由于Weight(A) > Weight(B),所以如果A中如果有问题球只可能是重球
                B中有问题球只能是轻球
              Weight(D) < Weight(B') ,说明重量不一样不是因为D组中的A球的问题,而是
              D组中的B中的两个球有问题,且问题球是轻球问题
              D组中的B中的两个球秤一下,结果就出来了
               
         }
Case3:Weight(A) < Weight(B)
        {
                Case2
          }
窗体底端

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。