应聘失败就是这道IQ题, 唉!!!IQ题: 有 12 颗玻璃球大小一样, 不知道哪一颗重了, 还是轻了. 请用天平秤秤3次, 把其中的一颗重量不均匀的玻璃球取出来!

解决方案 »

  1.   

    啊?已经有人(zuguanqun(小群))跟我想的一样了?哈哈,但他的题目中的“不知道哪一颗重了, 还是轻了 ~!!!”我觉得有问题,应该只有一个要要么是重,要么是轻,否则根本就没有办法做,因为第一步分两组的时候不知道留哪一组了。如果正好留反了,最后根本就找不出那个球了。所以这个前提条件是非常重要的。
      

  2.   

    不知轻重阿,想了一下还是要4次,
    zuguanqun(小群)的办法在次品比其余11个轻的时候有效,
    tonyzhangcn(东尼) 的办法在次品比其余11个重的时候有效,
    题目是不知轻重,所以都不对等待高手解答
      

  3.   

    分成4组每组3个怎么样?分别为A,B,C,D
    将A分别与B和C比较,只要有一次不等就能确定是还是轻。这样单独对D中的3个进行称就可以找出来了。不过有个问题,如果A与B,C比较的结果都是相等的话,那么还得是4次才能解决。
      

  4.   

    xiariguji(夏日孤寂)
    第一次分为3堆,每堆四个。
    一次称了以后可得有个不均匀的在其中的一堆,也就是在4个中的一个。//除非相等,你才知道在剩下的4个,不等的时候天知道在哪
      

  5.   

    xiariguji(夏日孤寂) :问题是不知道轻了还是重了。你第一次分3堆称,一次怎么可能知道其中一堆。
      

  6.   

    tonyzhangcn(东尼) 的方法倒是可行,不过有它说得那个问题。呵呵
      

  7.   

    tonyzhangcn(东尼) ( ) 信誉:99    Blog  2006-10-11 18:05:00  得分: 0  
     
     
       分成4组每组3个怎么样?分别为A,B,C,D
    将A分别与B和C比较,只要有一次不等就能确定是还是轻。这样单独对D中的3个进行称就可以找出来了。不过有个问题,如果A与B,C比较的结果都是相等的话,那么还得是4次才能解决。
      
     ------------------
    这个也不可行。要4次或以上
    1。IF A=B
    2。IFA<>C C中就有一个重/轻了
    3. C中的3个球分成2+1,再称,这次仍然不能找出哪个球重/轻了,还要一次.
      

  8.   

    sorry to  tonyzhangcn(东尼) 1。IF A=B
    2。IFA<>C C中就有一个重/轻了
    3. C中的3个球分成1+1,再称,
    这种情况下才能找到 目标球
      

  9.   

    xun56789
    说的很正确哟
    44
    22
    11
      

  10.   

    不好了,进错版本了,进JAVA版本了,幸亏俺发现的早,飘走飘走
      

  11.   

    Cnwanglin
    12个球分成四堆,任意选两堆放上去(每堆三个)(1)保持平衡,说明,目标球在另外两堆里,不平衡,就在这两堆里
    (2)找出问题的两堆,编号:123 , 456,没问题的球用*来表示, 如果 "1+5" 和 "4+2"继续撑,平衡, 则:问题球在3或6中,第三次 很容易分辨(* 与任意3,6比较)
    如果不平衡,1。A,B盘倾斜次序保持不变,问题球在1,4中,如果倾斜次序相反,问题球在2,5中
    (3)找出问题两球,比较既可正解问题最复杂的地方就在于123 与456 比较不同。这样可以分几种情况分别讨论
    把123放在天平左边
    情况A
      天平倾向123一边
      这种情况又有两种情况
          情况a:123中有一个球比普通球重
              再比较1+5,2+4
                  如果天平倾向左边,则1是较重的那个球(倾向和123一致)
                  否则天平倾向右边,则2是较重的那个球(倾向和123相反)
          情况b:456中有一个球比普通球轻
              再比较1+5,2+4
                  如果天平倾向左边,则4是较轻的那个球(倾向和123一致)
                  如果天平倾向右边,则5是较轻的那个球(倾向和123相反)
    情况B(推理过程和情况A相似。)
    所以倾向一致则1或4有问题。倾向不一致2或5有问题
      

  12.   

    太容易了 分成三组!
    A{a0,a1,a2,a3}
    B{b0,b1,b2,b3}
    C{c0,c1,c2,c3}
    if(A==B)
    {
       令D' = {c0,c1,c2}
            if ( D' = = {a0,a1,a2} ) {
                    c3 is bad ball;
             } else if( D' > {a0,a1,a2} ){                 
                     令D" = {c0 ,a0};
                     令D"" = {c1,a1};
                      if( D" = = D"" ){
                        c2 is bad ball;
                      }else{
                            if( D" > D"" )
                               c0 is bad ball;
                            else
                               c1 is bad ball; 
                     } 
            }else if( D' < {a0,a1,a2}) {
             令D" = {c0 ,a0};
                令D"" = {c1,a1};
                if( D" = = D"" ){
                   c2 is bad ball;
                }else{
                    if( D" > D"" )
                     c1 is bad ball;
               else
                     c0 is bad ball;
            }
    } if(A > B){
    令 D' = {a0,a1,b2,c3};                  ‘选球过程中还有a3,b3,b1没有选
    令 D" = {b0,c1,a2,c0};
    if( D' == D" ){              
         取{a3,b3}和{c0,c1}比较
         if( > ) 
               a3 is bad ball
         if( < ) 
               b3 is bad ball
         if( = )
               b1 is bad ball            
    }

    if(D > D" ){        ‘假设坏球大,那么就在a0,a1当中;假设坏球小,那么就在b0中
       坏球在a0,b0,a1之间
       取{a0,b0}和{c0,c1}比较
       ... if( > ) 
               a0 is bad ball
         if( < ) 
               b0 is bad ball
         if( = )
               a1 is bad ball  

    }
    if(D'< D" ){
    取a2,b2任一,和标准c0比较   ‘假设坏球大,那么就在a2当中;假设坏球小,那么就在b2中
         if a2>c0
    a2 is bad ball  
    else
    b2 is bad ball
    }
    }
    if(A < B){
    令 D' = {a0,a1,b2,c3};                  ‘选球过程中还有a3,b3,b1没有选
    令 D" = {b0,c1,a2,c0};
    if( D' == D" ){              
         取{a3,b3}和{c0,c1}比较
         if( > ) 
               b3 is bad ball
         if( < ) 
               a3 is bad ball
         if( = )
               b1 is bad ball            
    }

    if(D < D" ){        ‘假设坏球小,那么就在a0,a1当中;假设坏球大,那么就在b0中
       坏球在a0,b0,a1之间
       取{a0,b0}和{c0,c1}比较
       ... if( > ) 
               b0 is bad ball
         if( < ) 
               a0 is bad ball
         if( = )
               a1 is bad ball  

    }
    if(D'> D" ){
    取a2,b2任一,和标准c0比较   ‘假设坏球大,那么就在b2当中;假设坏球小,那么就在a2中
         if a2>c0
    b2 is bad ball  
    else
    a2 is bad ball
    }
    }
      

  13.   

    这个问题,在以前的csdn已经有人提过了,有点意思
      

  14.   

    3个以下   三的一次方   1算出  1V1
    9个以下   三的二次方   2算出  3V3   1v1
    27个以下  三的三次方   3算出  9V9   3V3  1v1
    81个以下  三的四次方   4算出  27v27 9V9   3V3  1v1
    .....
    以下类推..12个的合理算法,分为9,3,0
    在9中的话,2次可算出  (9再分3,3,3 )
    在3中的话,1次可算出12个最多三次可算出结果
      

  15.   

    分甲乙丙三组,其中甲乙两组比较
    A:相等,从丙组取两个球比较
      A1:相等,目标为丙组剩下的一个球
      A2:不等,将天平右边盘子上的球换成其他任意一个球
        A2a:相等,目标为刚才右边盘子上换下来的球
        A2b:不等,目标为左边盘子上的球
    B:不等,甲乙各留一个球在原来盘子上,再个取一个球交换盘子放,两两比较
      B1:相等,甲乙没参与比较的两个球进入A2程序
      B2:不等并且倾向方向不变,甲乙没交换的两个球进入A2程序
      B3:不等并且倾向方向改变,甲乙交换的两个球进入A2程序
      

  16.   

    这题我两年关就做过了.我来回答.开始同ziqing_1_2_3一样
    先把小球平均分成三组每组4个。
     分别是  组一, A.B.C.D 
             组二, 1.2.3.4  
             组三, a.b.c.d
     先用第一组和第二组称.平衡就不用说了(重或轻的球在组三中).
    先假设.组一重.组二轻.
     第一组和第二组不平衡.说明组一和组二中有一个球或重或轻.
     再用A.B.1 和C.D.2去称(这后面就要用逻辑去想了) 平衡那是在3.4球不同.
     不平衡.
     1.平衡有没有出现交换.那么 A.B 中有一球重.或 2球 轻
     2.平衡发生交换那么 C.D. 中有一球重.或 1 轻
    再用A.2或C.1和a.b称.就可以推理出不同重量的球
      

  17.   

    http://blog.csdn.net/CXXSoft/archive/2006/09/28/1299731.aspx看看一位高手写的程序,,,,,,关于此问题的
      

  18.   

    分成三组 A组  B组 C 各4个第一次:
      ①A和B称,如果相等证明不均匀的球在C组
     ②A和B称,如果不等证明不均匀的球在A组或B组,C组为标准重量第二次:
     第一次中的①情况:A和C称,如果C重 证明不均匀球比较重
                            如果C轻 证明不均匀球比较轻
     第一次中的②情况:A和C称,如果相等,证明B组有球不均匀,且根据1 ②的结果可以判断
                             出不均匀的球是重了,还是轻了
                  A和C称,如果不等,则A组有不均匀球,且根据跟C称的结果得知重了和还是轻了第三次:
     第二次已经得出了不均匀小球的组,以及它是重了还是轻了, 任意取出2球相称,便可知结果
      

  19.   


    分成三组 A组 B组 C 各4个
    顶第一次:
    ①A和B称,如果相等证明不均匀的球在C组
     ②A和B称,如果不等证明不均匀的球在A组或B组,C组为标准重量第二次:
    第一次中的①情况:A和C称,如果C重 证明不均匀球比较重
    如果C轻 证明不均匀球比较轻
    第一次中的②情况:A和C称,如果相等,证明B组有球不均匀,且根据1 ②的结果可以判断
    出不均匀的球是重了,还是轻了
    A和C称,如果不等,则A组有不均匀球,且根据跟C称的结果得知重了和还是轻了第三次:
    第二次已经得出了不均匀小球的组,以及它是重了还是轻了, 任意取出2球相称,便可知结果
      

  20.   

    分3组(a,b,c),每组4个({a1,a2,a3,a4},{b1,b2,b3,b4},{c1,c2,c3,c4})
    第一步,让A与B放上天平
    如果平衡就用(a1,a2,a3)与(c1,c2,c3)放到天平左右两边
    如果再次平衡证明C4有问题,
    用A4与C4比一下,就知道C4是重了还是轻了
    如果(a1,a2,a3)与(c1,c2,c3)不平衡
    则证明C4没有问题,且可以知道是轻了还是重了(因为A组是正常)
    把C1和C2分别放在天平左右两边
    如果平衡就C3重了或是轻了,
    不能如果是重了那就是下沉的那个是问题球,轻了就上升的那个球是了
    如果A与B不平衡(记住A是上升还上下沉)
    把a1,a2,b1,c1放在左边,a3,a4,b2,c2放右边,如果平了,那就是B3,B4其中一个有误,下次直接把B3与B4放天平两边就知道了哪个球有问题
    如果还是不平,则证明B3,B4正常
      

  21.   

    13个球很难吗?如果是13个则分组A(1.2.3.4) B(5.6.7.8) C(9.10.11.12.13)
    如果AB不平请参见ziqing_1_2_3(子清)的分析 ,否则再分D(1.2.3) E(9.10.11) F(12.13)如果DE不平则比较(9 10),(9 10)平则答案是11,如果9比10重且D比E重则答案是10,如果9比10重且D比E轻则答案是9.如果DE平则比较(1.12),平则答案是13,否则是12.
      

  22.   

    再把a1,a4与a2,a3放入天平的两边,如果平了,就证明b1,b2有问题,又根据开始A组的状态以及a1,a2,b1,c1与a3,a4,b2,c2的结果可以推出,是b1,b2哪个球重了或轻了,
    如果不平衡,如果A是下沉,则证明(a1,a2,a3,a4)中有一个重了,反之就是轻了
    a1,a2,b1,c1与a3,a4,b2,c2哪边方向同A一样就证明问题球在此方,且可知是中的哪二个(a1,a2)与(a3,a4)再用,a1,a4与a2,a3就可以断定具体哪一个球有误
      

  23.   

    分3组(a,b,c),每组4个({a1,a2,a3,a4},{b1,b2,b3,b4},{c1,c2,c3,c4})
    第一步,让A与B放上天平
    如果平衡就用(a1,a2,a3)与(c1,c2,c3)放到天平左右两边
    如果再次平衡证明C4有问题,
    用A4与C4比一下,就知道C4是重了还是轻了
    如果(a1,a2,a3)与(c1,c2,c3)不平衡
    则证明C4没有问题,且可以知道是轻了还是重了(因为A组是正常)
    把C1和C2分别放在天平左右两边
    如果平衡就C3重了或是轻了,
    不能如果是重了那就是下沉的那个是问题球,轻了就上升的那个球是了
    如果A与B不平衡(记住A是上升还上下沉)
    把a1,a2,b1,c1放在左边,a3,a4,b2,c2放右边,如果平了,那就是B3,B4其中一个有误,下次直接把B3与B4放天平两边就知道了哪个球有问题
    如果还是不平,则证明B3,B4正常
    再把a1,a4与a2,a3放入天平的两边,如果平了,就证明b1,b2有问题,又根据开始A组的状态以及a1,a2,b1,c1与a3,a4,b2,c2的结果可以推出,是b1,b2哪个球重了或轻了,
    如果不平衡,如果A是下沉,则证明(a1,a2,a3,a4)中有一个重了,反之就是轻了
    a1,a2,b1,c1与a3,a4,b2,c2哪边方向同A一样就证明问题球在此方,且可知是其中的哪二个(a1,a2)与(a3,a4)再用a1,a4与a2,a3就可以断定具体哪一个球有问题
      

  24.   

    最多可以称13个,以前做过,
    有人已经给出答案啦,
    如上:分3组(a,b,c),每组4个({a1,a2,a3,a4},{b1,b2,b3,b4},{c1,c2,c3,c4})
    第一步,让A与B放上天平
    如果平衡就用(a1,a2,a3)与(c1,c2,c3)放到天平左右两边
    如果再次平衡证明C4有问题,
    用A4与C4比一下,就知道C4是重了还是轻了
    如果(a1,a2,a3)与(c1,c2,c3)不平衡
    则证明C4没有问题,且可以知道是轻了还是重了(因为A组是正常)
    把C1和C2分别放在天平左右两边
    如果平衡就C3重了或是轻了,
    不能如果是重了那就是下沉的那个是问题球,轻了就上升的那个球是了
    如果A与B不平衡(记住A是上升还上下沉)
    把a1,a2,b1,c1放在左边,a3,a4,b2,c2放右边,如果平了,那就是B3,B4其中一个有误,下次直接把B3与B4放天平两边就知道了哪个球有问题
    如果还是不平,则证明B3,B4正常
    再把a1,a4与a2,a3放入天平的两边,如果平了,就证明b1,b2有问题,又根据开始A组的状态以及a1,a2,b1,c1与a3,a4,b2,c2的结果可以推出,是b1,b2哪个球重了或轻了,
    如果不平衡,如果A是下沉,则证明(a1,a2,a3,a4)中有一个重了,反之就是轻了
    a1,a2,b1,c1与a3,a4,b2,c2哪边方向同A一样就证明问题球在此方,且可知是其中的哪二个(a1,a2)与(a3,a4)再用a1,a4与a2,a3就可以断定具体哪一个球有问题
      

  25.   

    FandLR(jack.fandlr) ( ) 信誉:100    Blog  2006-10-19 23:45:47  得分: 0  
     
     
       
    楼上的,换种思路如何?
    我自制了一个天平,带12个托盘,每个放一个球,哪个有问题,一次搞定。--------------------------
    不知道是轻了还是重了,你一次怎么搞定  
     
    带12个指针嘛,11个球对天平压的指针刻度相同,第12个不同,不平衡的就是它了。
      

  26.   

    package sanyoo.entity;class Ball {
    private int weight;

    public void setWeight(int weight) {
    this.weight = weight;
    }

    public int getWeight() {
    return this.weight;
    }
    }class ComputerDifBall {
    /**
     * 天平称方法
     * @param balls1
     * @param balls2
     * @return int 0:平,1:balls1重,2:balls2重
     */
    public int balance(Ball[] balls1, Ball[] balls2) {
    for (int i = 0; i < balls1.length; i++) {
    int weight1 = balls1[i].getWeight();
    int weight2 = balls2[i].getWeight();
    if (weight1 > weight2) {
    return 1;
    } else if (weight1 < weight2) {
    return 2;
    }
    }
    return 0;
    }

    /**
     * 天平称方法
     * @param balls1
     * @param balls2
     * @return int 0:平,1:balls1重,2:balls2重
     */
    public int balance (Ball ball1, Ball ball2) {
    if (ball1.getWeight() == ball2.getWeight()) {
    return 0;
    } else if (ball1.getWeight() > ball2.getWeight()) {
    return 1;
    } else  {
    return 2;
    }
    }

    /**
     * 算出哪一个不一样,是重了还是轻了
     * @param balls
     * @return
     */
    public void balanceMethod(Ball[] balls) {
    Ball[] A = {balls[0],balls[1],balls[2],balls[3]};
    Ball[] B = {balls[4],balls[5],balls[6],balls[7]};
    Ball[] C = {balls[8],balls[9],balls[10],balls[11]};
    //1.称第一次
    int first = balance(A,B);
    if (first == 0) {
    //A==B,C组中有问题
    Ball[]D = new Ball[3];
    Ball[]E = new Ball[3];
    for (int i = 0 ; i < 3; i++) {
    D[i] = A[i];
    E[i] = C[i];
    }
    //2.称第二次
    int second = balance(D,E);
    if (second == 0) {
    //D,E相等,C中第4个有问题
    //3.称第三次
    int third = balance(A[0],C[3]);
    System.out.println("第12个球有问题!"+(third==2?"这个球重了!":"这个球轻了!"));
    } else {
    //3.称第三次
    int third = balance(C[0],C[1]);
    if (third == 0) {
    System.out.println("第11个球有问题!"+(third==2?"这个球重了!":"这个球轻了!"));
    } else {
    if (second == 1) {
    if (third == 1) {
    System.out.println("第10个球有问题!这个球轻了!");
    } else {
    System.out.println("第9个球有问题!这个球轻了!");
    }
    } else {
    if (third == 1) {
    System.out.println("第9个球有问题!这个球重了!");
    } else {
    System.out.println("第10个球有问题!这个球重了!");
    }
    }
    }
    }
    } else {
    Ball[] D = {A[0],A[1],B[0],C[0]};
    Ball[] E = {A[2],A[3],B[1],C[1]};
    //2.称第二次
    int second = balance(D,E);
    if (second == 0) {
    //A和B不等,且A[0]+A[1]+B[0]+C[0] == A[2]+A[3]+B[1]+C[1]
    //则肯定是B[2]/B[3]中有个球不一样
    //3.称第三次
    int third = balance(B[2],B[3]);
    if (first == 1) {
    if (third > 1 ) {
    System.out.println("第7个球有问题!这个球轻了!");
    } else {
    System.out.println("第8个球有问题!这个球轻了!");
    }
    } else {
    if (third > 1 ) {
    System.out.println("第8个球有问题!这个球重了!");
    } else {
    System.out.println("第7个球有问题!这个球重了!");
    }
    }
    } else {
    Ball[] F = {A[0],A[3]};
    Ball[] G = {A[1],A[2]};
    //3.称第三次
    int third = balance(F,G);
    if (third == 0) {
    //A中的球都是一样,B中有不相同的球
    //B中B[0],B[1]不一样
    if (first == 1) {
    if (second == 1) {
    System.out.println("第6个球有问题!这个球轻了!");
    } else {
    System.out.println("第5个球有问题!这个球轻了!");
    }
    } else {
    if (second == 1) {
    System.out.println("第5个球有问题!这个球重了!");
    } else {
    System.out.println("第6个球有问题!这个球重了!");
    }
    }
    } else {
    if (third == 1) {
    //则A[0],A[1]中有一个重的球
    if (first == 1) {
    if (second == 1) {
    System.out.println("第1个球有问题!这个球重了!");
    } else {
    System.out.println("第4个球有问题!这个球重了!");
    }
    } else {
    if (second == 1) {
    System.out.println("第3个球有问题!这个球轻了!");
    } else {
    System.out.println("第2个球有问题!这个球轻了!");
    }
    }
    } else {
    if (first == 1) {
    if (second == 1) {
    System.out.println("第2个球有问题!这个球重了!");
    } else {
    System.out.println("第3个球有问题!这个球重了!");
    }
    } else {
    if (second == 1) {
    System.out.println("第4个球有问题!这个球轻了!");
    } else {
    System.out.println("第1个球有问题!这个球轻了!");
    }
    }
    }
    }
    }

    }


    public static void main(String[] args) {
    ComputerDifBall cdb = new ComputerDifBall();
    for (int i = 0; i < 12; i++) {
    Ball[] ball = new Ball[12];
    for (int j = 0; j < 12; j++) {
    ball[j] = new Ball();
    if (i != j)
    ball[j].setWeight(0);
    else 
    ball[j].setWeight(10);
    }
    System.out.println("-------------第"+i+"次测试,注意重的球为第"+(i+1)+"个!-----------------");
    cdb.balanceMethod(ball);
    System.out.println();
    }

    for (int i = 0; i < 12; i++) {
    Ball[] ball = new Ball[12];
    for (int j = 0; j < 12; j++) {
    ball[j] = new Ball();
    if (i != j)
    ball[j].setWeight(10);
    else 
    ball[j].setWeight(0);
    }
    System.out.println("-------------第"+i+"次测试,注意轻的球为第"+(i+1)+"个!-----------------");
    cdb.balanceMethod(ball);
    System.out.println();
    }
    }
    }