我想法是分为3组 a.b.c.每组4个 第一步a 和b的比较,如果相同,肯定是C。
  不然,哪个轻就在哪一组,设为x 第二步。把x组分为两组。每组两个num1,num2
     再称一下。。哪个轻取哪一个,最后一步,就是在两个球之间比较。。   这个答案行不行啊??

解决方案 »

  1.   

    花了2分钟,想了一下先给这12个球做上标记。
    a1,a2,a3,a4
    b1,b2,b3,b4
    c1,c2,c3,c4第一次:a1,a2,a3,a4======b1,b2,b3,b41:如果平衡
    则,不一样的球在c1,c2,c3,c4里面从c组里面取两个球,假设是c1,c2.
    第二次:c1,c2
    如果平衡,则说明不一样的在c3,c4。从c3,c4中任意取一个,假设是c3,再从a组或b组中去一个,假设是a1。第三次:如果a1=c3。则c4是不一样的,如果不等,则c3是不一样的。同样,如果第二次不平衡,用同样的道理,可以称出,是c1,或者c2是不一样的。还有一种情况,假设第一次(a1,a2,a3,a4======b1,b2,b3,b4)称了以后,不平衡。
    则范围在a组或b组。
    这个我再想一下。
      

  2.   

    lbx1979(Love Arsenal) 正解,13球也如此
      

  3.   

    2 分钟搞定:1-c 12个球,先称1-4:5-81)若相等:
    则称 9-a:b-c 再称轻的那二个就行了
    2)若不等,说明8个里有一个是轻的,而9-c 是正常的球:
    取轻的那端随便二个出来,比如1-4 的轻,则拿出1-2 二个,放入9-a 二个,如果再轻就称 3 和4,如果平衡就称 1 和2
      

  4.   

    设 a1 到 ac 12个变量,其中有个变量值比其它的小,要求三次找出,编程如下:// 12 个球,任意一个重量小于其它球
    int a1=1;int a2=1;int a3=1;int a4=1;
    int a5=0;int a6=1;int a7=1;int a8=1;
    int a9=1;int aa=1;int ab=1;int ac=1;int b=0; int c=0; int d=0; // 这三个负责三次称// 第一次称
    b = (a1+a2+a3+a4) - (a5+a6+a7+a8);// 若轻球在第一组
    if (b<0) {
    //第二次
    c = (a3+a4+a9+aa) - (a5+a6+a7+a8);
    if (c==0) {
    // 第三次
    d = a1 - a2;
    MessageBox.Show((d>0 ? "a2": "a1").ToString());
    }
    else {
    // 第三次
    d = a3 - a4;
    MessageBox.Show((d>0 ? "a4": "a3").ToString());
    }
    }
    // 若轻球在第三组
    else if (b==0) {
    c = (a9+aa) - (ab+ac);
    if (c>0) {
    d = ab - ac;
    MessageBox.Show((d>0 ? "ac": "ab").ToString());
    }
    else {
    d = a9 -aa;
    MessageBox.Show((d>0 ? "a9": "aa").ToString());
    }
    }
    // 若轻球在第三组
    else {
    c = (a5+a6+a9+aa) - (a1+a2+a3+a4);
    if (c==0) {
    d = a7 - a8;
    MessageBox.Show(d>0 ? "a8": "a7");
    }
    else {
    d = a5 - a6;
    MessageBox.Show((d>0 ? "a6": "a5").ToString());
    }
    }
      

  5.   

    //完整注解版:// 12 个球,任意一个重量小于其它球
    int a1=1;int a2=1;int a3=1;int a4=1;
    int a5=0;int a6=1;int a7=1;int a8=1;
    int a9=1;int aa=1;int ab=1;int ac=1;int b=0; int c=0; int d=0; // 这三个负责三次称// 第一次称
    b = (a1+a2+a3+a4) - (a5+a6+a7+a8);// 若轻球在第一组
    if (b<0) {
    //第二次称(下同)
    c = (a3+a4+a9+aa) - (a5+a6+a7+a8);
    if (c==0) {
    // 第三次称(下同)
    d = a1 - a2;
    MessageBox.Show(d>0 ? "a2": "a1");
    }
    else {
    // 第三次称(下同)
    d = a3 - a4;
    MessageBox.Show(d>0 ? "a4": "a3");
    }
    }
    // 若轻球在第二组
    else if (b==0) {
    c = (a9+aa) - (ab+ac);
    if (c>0) {
    d = ab - ac;
    MessageBox.Show(d>0 ? "ac": "ab");
    }
    else {
    d = a9 -aa;
    MessageBox.Show(d>0 ? "a9": "aa");
    }
    }
    // 若轻球在第三组
    else {
    c = (a5+a6+a9+aa) - (a1+a2+a3+a4);
    if (c==0) {
    d = a7 - a8;
    MessageBox.Show(d>0 ? "a8": "a7");
    }
    else {
    d = a5 - a6;
    MessageBox.Show(d>0 ? "a6": "a5");
    }
    }
    // 来人啊,夸二句先
      

  6.   

    重和轻不是一样吗?把我的程序的 < 改成 > 就行了呀我最初见到这个题目时感觉难点在于新多出来的一个条件:“其中有一个质量与其他球不一样”也就是说未知是轻还是重,这用三步来完成想过,挺累,闲了偶再想想
      

  7.   

    同意 zhehui(小慧)的做法!
      

  8.   

    zhehui(小慧):
    :不是重球呢?是轻球如何做?
    还有你最后一步也不对啊
    上面的都没有完全解决这个问题
      

  9.   

    真是好笑!
      zhehui(小慧)的做法不就一目了然了吗?这也能考智商?
      看到这题目我就想出这个方法了,不知是我想得太少还是有些人想得太多?
      

  10.   

    我认为这题答案无解:
       从第三次往前倒推
       (1)如果第三次能作出判断有一个球与其它的球质量(N个)不一样,必需满足:
            A. 该集合的前提有一个球的质量与其它不一样
            B. 拥有一个参照对象:
                   a. 两个球质量一样
                   或
                   b. 有一个球不管是否有集合内, 但我们敢肯定,它可以作为一个参照
            分析:  若a, 集合至多只能三个球, 但是从三个球中能一次作出判断的成功率
                   只有50%, 是不完全成立的(不论是否有参照对象) .
            结论:  能一次作出判断的充分条件: 集合只能有两个球,拥有一个参照系 再倒推第2次的充分条件(略), 第1次的充分条件(略),与题目给定的条件比一比,能成功吗?  我的答案: 3次的成功率是50%
      
        第一次: 左右各取3个在天平上称, 
              if (质量相等)
                 当前这6个球 --> 有坏球的集合
              else
                 剩下的6个球 --> 有坏球的集合         结果: 排除一半
       
          第二次: 从坏球集合和非坏球集合各取3个在天平上称 (注: 非坏球集合的
                  3个球做参照物)
     
             if (质量相等)
                 从坏球集合取的3个球 --> 坏球的集合
             else
                 从坏球集合剩下的3个球 --> 非坏球的集合         结果: 又排除了3个
     
          第三次 : 从3个选取一个坏球, 成功率50%
                    不知道分析的是否严谨, 请大家看看.(事先假定质量不同的球是重球或轻球,或自以为是者,免了)   
      

  11.   

    更正:第一次: 左右各取3个在天平上称, 
              if (质量不相等)
                 当前这6个球 --> 有坏球的集合
              else
                 剩下的6个球 --> 有坏球的集合         结果: 排除一半
       
          第二次: 从坏球集合和非坏球集合各取3个在天平上称 (注: 非坏球集合的
                  3个球做参照物)
     
             if (质量不相等)
                 从坏球集合取的3个球 --> 坏球的集合
             else
                 从坏球集合剩下的3个球 --> 非坏球的集合         结果: 又排除了3个(不好意思)
      

  12.   

    kuangren(狂人): 
      
         10秒钟搞定?     这么厉害???? 天才???? 干什么的????
      

  13.   

    设重球为a;
    1.左右各6个得出含a的6个球;
    2.在含a的6个球中任选4个,在左右各两个进行称重,如果a在其中,则取重的一边(两个球)进行第三次称重可得出结果;如果不在,则用乘余的两个行进第三次称重。
    3.乘余的两个球可得出结果。
      

  14.   

    lbx1979(Love Arsenal) 正解还吹捧什么呀?已经有高人出现了,好好想想吧!
      

  15.   

    (1)1,2,3,4
    (2)5,6,7,8
    (3)9,10,11,12
    if(1)==(2)
    {
    不一样的在(3)
    //不一样的在9,10,11,12
    //从1-9中取3个,如1,2,3
    //1,2,3vs9,10,11
    //如果9,10,11是偏重的话,那么这个球就是重的
    //最后从9,10,11任取两个就知道了}
    else
    {
    不一样的在(1)(2)
    123vs456
    if(123==456)
    {
    不一样的在78,那么最后一次就看78就行了
    //看下沉方向判断
    }
    if(123>456)
    {
        if(刚才(1)vs(2)时(1)>(2))
             {
               // 那么不一样的在123中
                if(1==2)
                   3就是要找的球
                 else
                    看方向//如果123>456那么说明不一样的球是重的
                     于是可以判断出球是那一个           
             }    else
            {
             //不一样的在456中
             //判断的原理和123,456比较的方法一样
            }}}
    //刚才在上面说10秒不好意思,没有看到说球是轻还是重的
    要是知道的话,用两分法就可以了