12个球一个天平,现知道只有一个和其它的重量不同,问怎样称才能用三次就找到那
个球。13个呢?(注意此题并未说明那个球的重量是轻是重,所以需要仔细考虑)(5分
钟-1小时)

解决方案 »

  1.   

    万一 桔子,苹果 是用现代生物技术种出来的,长得一抹一样怎么办呀光看区分不了的,必须进行DNA鉴定!
      

  2.   

    For 球
    A.(12)4、4、4-->得到一个4,分2、2--> 1、1 --->结果
    B.(13)4、4、5-->得到一个4 同A
                   -->得到一个5,分2、2、1-->如得到 2 同A 如得到一结果出来了 
    For 水果
    当然是先看混合箱了! 
    想当于 三个箱子 AA BB AB 如果只有一种解决方法,很明显啊! :)
      

  3.   

    For 球
    A.(12)4、4、4-->得到一个4,分2、2--> 1、1 --->结果
    ----------------------------------------------------------4、4、4-->得到一个4  幸运的话称1次,不幸运要称2次
    分2、2  两个重量不一样,怎么确定在哪2个里面?
    1、1 --->结果   怎么得结果?
      

  4.   

    首先将12个球分成3堆,4+4+4,将两堆放到天平上,第一次称,可能结果:A:平衡,B:不平衡:
    A:平衡情况:在余下的未称过的4个里,取其中的三个将2个放在天平的一边,假设放在左边,一个放在右边,第一次平衡的那些球我们可以知道它是正常的,我们称它为标准球,取一个标准球,放在一个的天平一边,用铅笔打个记号,表示他正常,第二次结果有以下几个:平衡A1, 不平衡A2。
    A1:显然在唯一一个未称过的那个球,这种情况无法知道它是轻还是重;这是找到了,而且只用到了两次称天平。
    A2:如果不平衡,我们可以将下沉的那边的除去标准球外的球标上+,轻的那个标上-号,结果无非在
    +、+、-、或-、-、+三个球中,去其中的一个+、-放在天平的一端,取第一次的8个标准球的两个,放在另一端,如果标准球重,显然我们加深-的那个正确,所以那个-球就是我们要找到的,如果标准球那端轻,说明我们+号那个球正确,不管那个都找到了那个坏球。达到目的了。共用到了三次机会。
    接下来来解决B不平衡情况:
    B:不平衡情况:(此时还有两次机会)
        我们可以假设下沉那端可能重,上浮那端可能轻,我们在这里可以用上面一样的方法,用铅笔标上在球上标上+号代表可能重,-号代表可能轻的球。我们在这里假设左边下沉,显然未称过的4个球没有问题,我们可以称其为标准球。然后我们取5个可能不正常的球(即打上+或者-号的球,按3+2取),假设取3个+号的球,2个-号的球,(3个-号的球,2个+号的球的情况同理可证),接下来第二次称重,将++-组合放在天平一端,-+放在另一端,在这一端我们添上一个标准球,这样可以组成3和3的来称 ,注意到我们将原来的一个+球和-球交换了,++-还放在左端,-+和正常的球放在右边,结果有以下几种情况:B21:如果平衡结果不变,说明问题球在左边的++和右边的-里;
    B22:如果不平衡情况交换了,说明球在我们交换的两个球里,B23:如果球平衡,说明问题球在没参加天平称重的;
    下面的+--三个球中;
    下面处理B1、B2、B3情况:
    B21:如果平衡结果不变,说明问题球在左边的++和右边的-里,接下来有一次机会找出三个球的,取其中的+-放到天平左端,取标准球2个放在天平的右端,如果左端下沉,说明我们假设+的那个球是正确的,如果左端上浮,说明我们左端那个-号的球正确,,如果平衡的,剩下的那个未参加第三次平衡的那个+号球有问题。
    B22:如果不平衡情况交换了,说明球在我们交换的两个球里,我们可以有一次机会确定2个球,一个+和一个-的球中确定,很容易,将他们放在天平左端,利用标准球,放2个标准球在右边;
    如果B23:如果球平衡,说明问题球在没参加天平称重的面的+--三个球中;接下来的要做的事是如何用仅有的一次机会去确定三个球假设为+--中找到那个是坏球,地球人都会
      

  5.   

    12球的问题1、4-4-4,一次可以得出有问题的哪个球的一组.a组,b组,c组。假设为a组
    假设有问题的那一组为a1,a2,a3,a4.2、我随便拿两个球,比如是a1,a2,我在b或c组中随便拿两个好的球(2b),如果平衡,就是a3,a4中有坏球,如果不平衡就是a1,a2中。3、假设坏球为a1,a2。随便拿个好球(b,c组中都是好球)与a1比较,平衡则a2为坏,不平衡则为a1就三次,简单
      

  6.   

    12球的问题1、4-4-4,一次可以得出有问题的哪个球的一组.a组,b组,c组。假设为a组=========
    怎么一次得到问题球堆??
    在天平上是平衡的时候是另外一组,那么在不平衡的时候是天平上哪个组??
      

  7.   

    A{1、2、3、4} B{5、6、7、8} C{9、10、11、12} 12个球分三组
    A与B称第一次
        i.)A = B
           D{1、2} E{9、10}称第二次
           a.)D = E
              1与11称第三次
              (1)1 = 11
               12重量不同
              (2)1 != 11
               11重量不同
           b.) D != E
              1与9称第三次
              (1) 1 = 9
              10重量不同
              (2) 1 != 9
              9重量不同
        ii.)A != B
           F{1、2、7、8} G{3、4、9、10}称第二次
           a.)F = G 则不同的球在5、6中
              1与5称第三次,
              (1)1 = 5 则 6重量不同
              (2)1 != 5 则 5重量不同
           b.)F != G 且天平的轻重保持与第一次一样
              则不同的球在1、2中
              1与3称第三次
              (1) 1 = 3 则2的重量不同
              (2) 1!= 3 则1的重量不同
           c.)F != G 且天平的轻重保持与第一次反向
              则不同的球在3、4中
              1与3称第三次
              (1) 1 = 3 则4的重量不同
              (2) 1!= 3 则3的重量不同
      

  8.   

    分三堆A, B, C各4個絿。
    第一次:  A   vs    B
      結果: 相等1  或  不等1if(A==B){
      毬在C 中, c1, c2, c3, c4
     第二次: c1   vs  c2    結果: 相等2  或  不等2
     第三次: c1    vs c3     結果: 相等3  或  不等3
      都相等, ===> c4, 都不等===> c1
      相等2  不等3===>c3, 不等2  相等3 ===>c2
    }else{
      假設A中有A1, A2各兩個, B中有B1, B2各兩個
      第二次:從A中取出兩個 A2中的一個A2_2放到B, 從B中取走兩個B2放一遍 
       結果平衡,在B2中(2毬)
         記錄下第一次B是輕了還是重了。說明異常毬是輕了還是重了。
          第三次:a1 vs a2  得結果 平衡===〉a3, 不平衡看異常毬是輕了還是重了===〉a1還是a2.   結果變化: ===〉A2_2
      結果不變化:在A的三毬中a1, a2, a3。A是輕還是重?記錄下。說明異常毬是輕了還是重了。
               第三次:a1 vs a2  得結果 平衡===〉a3, 不平衡看異常毬是輕了還是重了===〉a1還是a2.
      
    }
      

  9.   

    寫錯了一個小地方
    ————————————————————————————分三堆A, B, C各4個絿。
    第一次:  A   vs    B
      結果: 相等1  或  不等1if(A==B){
      毬在C 中, c1, c2, c3, c4
     第二次: c1   vs  c2    結果: 相等2  或  不等2
     第三次: c1    vs c3     結果: 相等3  或  不等3
      都相等, ===> c4, 都不等===> c1
      相等2  不等3===>c3, 不等2  相等3 ===>c2
    }else{
      假設A中有A1, A2各兩個, B中有B1, B2各兩個
      第二次:從A中取出兩個 A2中的一個A2_2放到B, 從B中取走兩個B2放一遍 
       結果平衡,在B2中(2毬)
         記錄下第一次B是輕了還是重了。說明異常毬是輕了還是重了。
          第三次:b1 vs b2  根據異常毬是輕了還是重了===〉b1還是b2.   結果變化: ===〉A2_2
      結果不變化:在A的三毬中a1, a2, a3。A是輕還是重?記錄下。說明異常毬是輕了還是重了。
               第三次:a1 vs a2  得結果 平衡===〉a3, 不平衡看異常毬是輕了還是重了===〉a1還是a2.
      
    }
      

  10.   

    Ivony() ( ) 的方法好像也可以的。
      

  11.   

    enjoy330(*寒林*) 
    我觉得你的最后一步有点小问题:結果不變化:在A的三毬中a1, a2, a3。A是輕還是重?記錄下。說明異常毬是輕了還是重了。
               第三次:a1 vs a2  得結果 平衡===〉a3, 不平衡看異常毬是輕了還是重了===〉a1還是a2.当结果不变化时没有动的a1、a2、a3及b1都是有可能异常的!不当之处请别见怪!:)
      

  12.   

    to:Aprcen(东方来风)你的好象不正确啊."依次放入"是不是就称量多次了。违规!
      

  13.   

    用VB表示如下:'1,2,3,4,5,6,7,8,9,10,11,12
    'A(1-4) B(5-8) C(9-12)
    'A and  B
    If A = B Then
        '1-2 and 9-10
        If 1 & 2 = 9 & 10 Then
            '1 and 11
            If 1 = 11 Then
                '12 is bad
            Else
                '11 is bad
            End If
        Else
            '1 and 9
            If 1 = 9 Then
                '10 is bad
            Else
                '9 is bad
            End If
        End If
    Else
        '1 & 2 & 5 & 6 and 3 & 4 & 9 & 10
        If 1 & 2 & 5 & 6 = 3 & 4 & 9 & 10 Then
            '1 and 7
            If 1 = 7 Then
                '8 is bad
            Else
                '7 is bad
            End If
        Else
            If (1 & 2 & 5 & 6 And 3 & 4 & 9 & 10) = (A And B) Then
                '1 and 9
                If 1 = 9 Then
                    '2 is bad
                Else
                    '1 is bad
                End If
            Else
                '3 and 9
                If 3 = 9 Then
                    '4 is bad
                Else
                    '3 is bad
                End If
            End If
        End If
    End If先吃饭,下午考虑13个球的问题
      

  14.   

    lucidcai() 的题目内容是对的如果"标签全部是贴错的",拿任何一个看看,其他两个都出来了。
      

  15.   

    to zhuxiaojun2002(车房志之扯坏的领带):
    依次放入有称量多次之嫌,但这也是打擦边球,可以说并没称啊!6个对6个难道还不许我一个一个放进去?在放进时就观察呗.
    我这个答案也是别人告诉的,以前有人出过这题,说让我们见识一下微软的风格,有时不是那么复杂,是想多了.我不知道人家说的对不对,只拿给大家做参考,也许它就是那么狡猾!
      

  16.   

    lucidcai() 的题目内容是对的如果"标签全部是贴错的",拿任何一个看看,其他两个都出来了。
    ==========================================================可能的话,是猜不出来的,无解。至于拿任何一个出来看看更是无稽,你拿出来一个苹果你知道它里面是苹果还是混合?
    所以必须要全错,然后从混合的箱子里面拿,才能判断……
      

  17.   

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Collections;namespace _2球
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }        private void button1_Click(object sender, EventArgs e)
            {
                ArrayList array = GetInt();
                for (int i = 0; i < 12; i++)
                {
                                    int[] bobs = (int[])array[i];
                    ShowMessage(bobs);
                }            
            }
            private void ShowMessage(int[] bob)
            {
                int[] z1 = new int[4];
                int[] z2 = new int[4];
                int[] z3 = new int[4];
                int index;
                for (int i = 0; i < 12; i++)
                {
                    if (i < 4)
                    {
                        z1[i]=bob[i];
                        continue;
                    }
                    if (i < 8)
                    {
                        z2[i - 4]=bob[i];
                        continue;
                    }
                    if (i < 12)
                    {
                        z3[i - 8] = bob[i];
                        continue;                }
                }
                ShowMess(z1, z2, z3);        }
            private void ShowMess(int[] z1, int[] z2, int[] z3)
            {
                int count1 = 0;
                int count2 = 0;
                int count3 = 0;
                int[] x1, x2, x3;
                int[] x4;
                //flag用来记录那边重;count1代表左边;
                bool flag,flag1;
                for (int i = 0; i < 4; i++)
                {
                    count1 += z1[i];
                    count2 += z2[i];
                    count3 += z3[i];
                }
                //如果count1 跟count2不等,表示坏球在这8个球里
                if (count1 != count2)
                {
                    if (count1 > count2)
                    {
                        flag = true;
                    }
                    else
                    {
                        flag = false;
                    }
                    //从z1里拿出3个球,z2里拿出2个球,z1里把2个球放到右边,z2里拿出1个球放到左边;
                    x1 = new int[3];
                    x2 = new int[3];
                    x3 = new int[3];
                    x1[0] = z1[0];
                    x1[1] = z2[0];
                    x1[2] = z3[0];
                    x2[0] = z1[1];
                    x2[1] = z1[2];
                    x2[2] = z2[1];
                    x3[0] = z1[3];
                    x3[1] = z2[2];
                    x3[2] = z2[3];
                    count1 = 0;
                    count2 = 0;
                    for (int t1 = 0; t1 < 3; t1++)
                    {
                        count1 += x1[t1];
                        count2 += x2[t1];
                    }                if (count1 != count2)
                    {
                        if (count1 > count2)
                        {
                            flag1 = true;
                        }
                        else
                        {
                            flag1 = false;
                        }
                        //如果还是于第1次那边重1样得话,交换得3个球没问题;
                        if (flag == flag1)
                        {
                            if (x1[0] != z3[0])
                            {
                                MessageBox.Show("第1个球有问题");
                            }
                            else
                            {
                                MessageBox.Show("第6个球有问题");
                            }
                        }
                        //交换得3个球里有1个问题;,3个球分别是z1[1],z1[2],z2[0]
                        else
                        {
                            if (z1[1] > z1[2])
                            {
                                if (flag == true)
                                {
                                    MessageBox.Show("第2个球有问题");
                                }
                                else
                                {
                                    MessageBox.Show("第3个球有问题");
                                }                        }
                            else if (z1[1] == z1[2])
                            {
                                MessageBox.Show("第5个球有问题");
                            }
                            else if (z1[1] < z1[2])
                            {
                                if (flag == true)
                                {
                                    MessageBox.Show("第3个球有问题");
                                }
                                else
                                {
                                    MessageBox.Show("第2个球有问题");
                                }                        }                    }                }            //拿出去得3个球有问题,分别是z1[3],z2[2],z2[3]
                    else
                    {
                        if (z2[2] > z2[3])
                        {
                            if (flag == true)
                            {                            MessageBox.Show("第8个球有问题");
                            }
                            else
                            {
                                MessageBox.Show("第7个球有问题");
                            }                    }
                        else if (z2[2] == z2[3])
                        {
                            MessageBox.Show("第4个球有问题");
                        }
                        else if (z2[2] < z2[3])
                        {
                            if (flag == true)
                            {
                                MessageBox.Show("第7个球有问题");
                            }
                            else
                            {
                                MessageBox.Show("第8个球有问题");
                            }
                        }
                    }            }//最后4个球有问题,是z3[0],z3[1],z3[2],z3[4]
                else
                {
                    int[] X1 = new int[2];
                    int[] X2 = new int[2];
                    X1[0] = z3[0];
                    X1[1] = z3[1];
                    X2[0] = z3[2];
                    X2[1] = z3[3];
                    count1 = 0;
                    count2 = 0;
                    count1 = z1[0] + z1[1];
                    count2 = X1[0] + X1[1];                if (count1 != count2)
                    {
                        if (X1[0] != z1[0])
                        {
                            MessageBox.Show("第九个球有问题");                    }
                        else
                        {
                            MessageBox.Show("第10个球有问题");
                        }
                    }
                    else
                    {
                        if (X2[0] != z1[0])
                        {
                            MessageBox.Show("第11球有问题");
                        }
                        else
                        {
                            MessageBox.Show("第12球有问题");
                        }
                    }
                }        }
            private ArrayList GetInt()
            {
                //假定11球重0,坏球重-1;
                ArrayList array = new ArrayList(12);
                for (int i = 0; i < 12; i++)
                {
                    int[] bobs = new int[12];
                    for (int z = 0; z < 12; z++)
                    {
                        if (z != i)
                        {
                            bobs[z] = 0;                    }
                        else
                        {
                            bobs[z] =- 1;
                        }                }
                    array.Add(bobs);
                }
                return array;
            }    }
    }
      

  18.   

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Collections;namespace _2球
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }        private void button1_Click(object sender, EventArgs e)
            {
                ArrayList array = GetInt();
                for (int i = 0; i < 13; i++)
                {
                                    int[] bobs = (int[])array[i];
                    ShowMessage(bobs);
                }            
            }
            private void ShowMessage(int[] bob)
            {
                int[] z1 = new int[4];
                int[] z2 = new int[4];
                int[] z3 = new int[5];
                int index;
                for (int i = 0; i < 13; i++)
                {
                    if (i < 4)
                    {
                        z1[i]=bob[i];
                        continue;
                    }
                    if (i < 8)
                    {
                        z2[i - 4]=bob[i];
                        continue;
                    }
                    if (i < 13)
                    {
                        z3[i - 8] = bob[i];
                        continue;                }
                }
                ShowMess(z1, z2, z3);        }
            private void ShowMess(int[] z1, int[] z2, int[] z3)
            {
                int count1 = 0;
                int count2 = 0;
                int count3 = 0;
                int[] x1, x2, x3;
                int[] x4;
                //flag用来记录那边重;count1代表左边;
                bool flag,flag1;
                for (int i = 0; i < 4; i++)
                {
                    count1 += z1[i];
                    count2 += z2[i];
                    count3 += z3[i];
                }
                //如果count1 跟count2不等,表示坏球在这8个球里
                if (count1 != count2)
                {
                    if (count1 > count2)
                    {
                        flag = true;
                    }
                    else
                    {
                        flag = false;
                    }
                    //从z1里拿出3个球,z2里拿出2个球,z1里把2个球放到右边,z2里拿出1个球放到左边;
                    x1 = new int[3];
                    x2 = new int[3];
                    x3 = new int[3];
                    x1[0] = z1[0];
                    x1[1] = z2[0];
                    x1[2] = z3[0];
                    x2[0] = z1[1];
                    x2[1] = z1[2];
                    x2[2] = z2[1];
                    x3[0] = z1[3];
                    x3[1] = z2[2];
                    x3[2] = z2[3];
                    count1 = 0;
                    count2 = 0;
                    for (int t1 = 0; t1 < 3; t1++)
                    {
                        count1 += x1[t1];
                        count2 += x2[t1];
                    }                if (count1 != count2)
                    {
                        if (count1 > count2)
                        {
                            flag1 = true;
                        }
                        else
                        {
                            flag1 = false;
                        }
                        //如果还是于第1次那边重1样得话,交换得3个球没问题;
                        if (flag == flag1)
                        {
                            if (x1[0] != z3[0])
                            {
                                MessageBox.Show("第1个球有问题");
                            }
                            else
                            {
                                MessageBox.Show("第6个球有问题");
                            }
                        }
                        //交换得3个球里有1个问题;,3个球分别是z1[1],z1[2],z2[0]
                        else
                        {
                            if (z1[1] > z1[2])
                            {
                                if (flag == true)
                                {
                                    MessageBox.Show("第2个球有问题");
                                }
                                else
                                {
                                    MessageBox.Show("第3个球有问题");
                                }                        }
                            else if (z1[1] == z1[2])
                            {
                                MessageBox.Show("第5个球有问题");
                            }
                            else if (z1[1] < z1[2])
                            {
                                if (flag == true)
                                {
                                    MessageBox.Show("第3个球有问题");
                                }
                                else
                                {
                                    MessageBox.Show("第2个球有问题");
                                }                        }                    }                }            //拿出去得3个球有问题,分别是z1[3],z2[2],z2[3]
                    else
                    {
                        if (z2[2] > z2[3])
                        {
                            if (flag == true)
                            {                            MessageBox.Show("第8个球有问题");
                            }
                            else
                            {
                                MessageBox.Show("第7个球有问题");
                            }                    }
                        else if (z2[2] == z2[3])
                        {
                            MessageBox.Show("第4个球有问题");
                        }
                        else if (z2[2] < z2[3])
                        {
                            if (flag == true)
                            {
                                MessageBox.Show("第7个球有问题");
                            }
                            else
                            {
                                MessageBox.Show("第8个球有问题");
                            }
                        }
                    }            }
                else
                {
                    int[] X1 = new int[2];
                    int[] X2 = new int[2];
                    X1[0] = z3[0];
                    X1[1] = z3[1];
                    X2[0] = z3[2];
                    X2[1] = z3[3];
                    int[] X3 = new int[2];
                    int[] X4 = new int[2];
                    count2 = X2[0] + X2[1];
                    count1 = X1[0] + X1[1];
                     if (count1 != count2)
                    {
                        if (count1 > count2)
                        {
                            flag = true;
                        }
                        else
                        {
                            flag = false;
                        }
                         //拿走X1左边1个球,拿第13个球放入,把X2得第1个球跟X1得第2个球调换换下
                        X3[0] = z3[4];
                        X3[1] = X2[0];
                        X4[0] = X1[1];
                        X4[1] = X2[1];
                         //如果不等表示3个球中有1个是坏的
                        if ((X3[0] + X3[1]) != (X4[0] + X4[1]))
                        {
                            if ((X3[0] + X3[1]) > (X4[0] + X4[1]))
                            {
                                flag1 = true;
                            }
                            else
                            {
                                flag1 = false;
                            }
      

  19.   

    //接上面代码                      
     //如果相等表示交换得球没有问题,
                            if (flag == flag1)
                            {
                                MessageBox.Show("第12个球有问题");
                            }
                            else
                            {
                                if (X3[1] > X4[0])
                                {
                                    if (flag == true)
                                    {
                                        MessageBox.Show("第11个球有问题");
                                    }
                                    else
                                    {
                                        MessageBox.Show("第10个球有问题");
                                    }
                                }
                                else
                                {
                                    if (flag == true)
                                    {
                                        MessageBox.Show("第11个球有问题");
                                    }
                                    else
                                    {
                                        MessageBox.Show("第10个球有问题");
                                    }
                                }
                            }
                        }
                        else
                        {
                            MessageBox.Show("第9个球有问题");
                        }                 
                    }
                    else
                    {
                        MessageBox.Show("第13个球有问题");
                    }
                }
               
        
            }
            private ArrayList GetInt()
            {
                //假定11球重0,坏球重-1;
                ArrayList array = new ArrayList(13);
                for (int i = 0; i < 13; i++)
                {
                    int[] bobs = new int[13];
                    for (int z = 0; z < 13; z++)
                    {
                        if (z != i)
                        {
                            bobs[z] = 0;                    }
                        else
                        {
                            bobs[z] =- 1;
                        }                }
                    array.Add(bobs);
                }
                return array;
            }    }
    }