题目如下:有十二个球,其中一个重量不同,其余十一个重量相同,个一部天平,只许称三次,请找出不同的一个!~! 
这个题的难点在重量不同的那个球不知道是轻是重,请大家帮忙想想看。(如果有兴趣的话可以用vb写个算法小程序发上来)

解决方案 »

  1.   

    用一次称其中两份不能知道不同的球在哪一堆里。a,b,c三堆,如果a,b称称平,那么c里有一个不同;但ab不平呢?a里有不同还是b里有不同?
      

  2.   

    http://www.trucy.net/cgi-bin/forum/view.cgi?forum=6&topic=17
      

  3.   

    alicky(周松) :你的还是错的,错在第2步!如果那个不同重量的球是轻的,你第2次称天平就是平横的,你还有一步了。你只知道轻球在那6个球里!你仔细想想
      

  4.   

    3步可以实现(中午没事刚写出来):Private Sub Command1_Click()
    Dim x(1 To 12) As String, temp As Integer, i As Integer
    For i = 1 To 12
    x(i) = 2
    Next
    Randomize
    temp = (Int(Rnd * 12 + 1))
    x(temp) = 2 + (-1) ^ Int(Rnd * 2) ' define a light ball
    getit x
    End Sub
    Sub getit(ByRef x() As String)Dim a(1 To 12) As Double, i As Long, heavy As Boolean, diff As Integer
    For i = 1 To 12
    a(i) = CDbl(x(i))
    Next
    If a(1) + a(2) + a(3) + a(4) = a(5) + a(6) + a(7) + a(8) Then ' step 1
        If a(9) + a(10) = a(11) + a(1) Then ' step 2
            diff = 12
            If a(1) > a(12) Then 'step 3
                heavy = False
            Else
                heavy = True
            End If
        End If
        If a(9) + a(10) > a(11) + a(1) Then ' step 2
            If a(9) = a(10) Then 'step 3
            diff = 11
            heavy = False
            ElseIf a(9) > a(10) Then 'step 3
            diff = 9
            heavy = True
            ElseIf a(9) < a(10) Then 'step 3
            diff = 10
            heavy = True
            End If
        End If
        If a(9) + a(10) < a(11) + a(1) Then 'step 2
            If a(9) = a(10) Then 'step 3
            diff = 11
            heavy = True
            ElseIf a(9) > a(10) Then 'step 3
            diff = 10
            heavy = False
            ElseIf a(9) < a(10) Then 'step 3
            diff = 9
            heavy = False
            End If
        End If
      End If
      
      If a(1) + a(2) + a(3) + a(4) > a(5) + a(6) + a(7) + a(8) Then 'step 1
        If a(1) + a(6) + a(7) + a(8) = a(5) + a(9) + a(10) + a(11) Then 'step 2
        
            If a(2) = a(3) Then diff = 4  'step 3
            If a(2) < a(3) Then diff = 3 'step 3
            If a(2) > a(3) Then diff = 2 'step 3
            heavy = True
         End If
         
        If a(1) + a(6) + a(7) + a(8) > a(5) + a(9) + a(10) + a(11) Then 'step 2
        
            If a(1) = a(2) Then 'step 3
                diff = 5
                heavy = False
            End If
            If a(1) > a(2) Then 'step 3
                diff = 1
                heavy = True
            End If
         End If
         
       If a(1) + a(6) + a(7) + a(8) < a(5) + a(9) + a(10) + a(11) Then 'step 2
        
            If a(6) = a(7) Then 'step 3
                diff = 8
            End If
            If a(6) > a(7) Then 'step 3
                diff = 7
            End If
            If a(6) < a(7) Then 'step 3
                diff = 6
            End If
            heavy = False
         End If
      End If
      
     If a(1) + a(2) + a(3) + a(4) < a(5) + a(6) + a(7) + a(8) Then 'step 1
        
        If a(1) + a(6) + a(7) + a(8) = a(5) + a(9) + a(10) + a(11) Then 'step 2
        
            If a(2) = a(3) Then 'step 3
                diff = 4
            End If
            If a(2) < a(3) Then 'step 3
                diff = 2
            End If
            If a(2) > a(3) Then 'step 3
                diff = 3
            End If
            heavy = False
         End If
         
        If a(1) + a(6) + a(7) + a(8) > a(5) + a(9) + a(10) + a(11) Then 'step 2
        
            If a(6) = a(7) Then diff = 8 'step 3
            If a(6) > a(7) Then diff = 6 'step 3
            If a(6) < a(7) Then diff = 7 'step 3
            heavy = True
         End If
         
       If a(1) + a(6) + a(7) + a(8) < a(5) + a(9) + a(10) + a(11) Then 'step 2
        
            If a(1) = a(2) Then 'step 3
                diff = 5
                heavy = True
            End If
            If a(1) < a(2) Then 'step 3
                diff = 1
                heavy = False
            End If
        End If
    End If
        MsgBox "若12个球重量为:" & Join(x, ",") & vbCrLf & vbCrLf & "则第 " & diff & "个球偏" & IIf(heavy = True, "重!", "轻!"), 64, "结果"
    End Sub
      

  5.   

    分析的非常完整,谢谢 northwolves(野性的呼唤),也谢谢作者.供我学习参考.
    UP!