
男人的謊言可以騙女人的壹夜! 女人的謊言可以騙男人的壹生!
Option Explicit
Private Sub Form_Load()
Dim a(11) As Long
Dim i As Long, b As Long, Result As Long
10:
Randomize
'正品的重量为5,次品为6或4
For i = 0 To 11
a(i) = 5
Next
b = Rnd * 11
a(b) = IIf(Rnd * 3 > 2, 6, 4)
Dim c1&, c2&, c3& '分别为第一次,第二次,第三次的比较结果
c1 = Cmp(a(0) + a(1) + a(2) + a(3), a(4) + a(5) + a(6) + a(7))
If c1 = 0 Then
'在8,9,10,11(这时0-7是好的)
c2 = Cmp(a(8), a(10))
If c2 = 0 Then
'8和10相等,则表示在 9 或 11
c3 = Cmp(a(9), a(0))
If c3 = 0 Then
Result = 11
Else
Result = 9
End If
Else '在8 或 10
c3 = Cmp(a(8), a(0))
If c3 = 0 Then
Result = 10
Else
Result = 8
End If
End If
Else
'在0,1,2,3,4,5,6,7
c2 = Cmp(a(0) + a(5) + a(6) + a(7), a(4) + a(8) + a(9) + a(10))
If c2 = 0 Then
'在1,2,3
c3 = Cmp(a(1), a(2))
If c3 = 0 Then
'如果1和2相等,则表示第3个球是有问题的
Result = 3
ElseIf (c3 = c1) Then
'好好想一下,我都不知如何表达是好....
Result = 1
Else
Result = 2
End If
ElseIf c2 <> c1 Then
'由于移动了5,6,7,而8,9,10是好的,所以得出坏球在 5,6,7
c3 = Cmp(a(5), a(6))
If c3 = 0 Then
Result = 7
ElseIf c3 = c1 Then
'5,6,7一开始是在右边的,这里与1,2,3稍有不同
Result = 6
Else
Result = 5
End If
Else
'在0,4
c3 = Cmp(a(0), a(8))
If c3 = 0 Then
Result = 4
Else
Result = 0
End If
End If
End If
Dim s As String
s = "次品:" & b & vbCrLf
s = s & "结果:" & Result & vbCrLf & vbCrLf
s = s & "清单:" & vbCrLf
For i = 0 To 11
s = s & Format(i, "(00)") & a(i) & vbCrLf
Next
s = s & "要继续吗?"
If MsgBox(s, vbYesNo + vbInformation) = vbYes Then
GoTo 10
End If
Unload Me
End Sub
'--------------------------------------------------------------
'Cmp函数当作一把天平,如果左边重返回1,右边重返回-1,相等返回0
Private Function Cmp(ByVal a As Long, ByVal b As Long) As Long
If a > b Then
Cmp = 1
ElseIf a < b Then
Cmp = -1
Else
Cmp = 0
End If
End Function
语言叙述:
解:
设标准小球质量为w,将12个小球依次编号为a1,a2,...,a12,分组为:
a1,a2 ,a3 ,a4 为A1组
a5,a6 ,a7 ,a8 为A2组
a9,a10,a11,a12 为A3组
==(第一次)1选定任意2组--取A1,A2进行比较,如果
1 A1=A2
则A1/A2组8个小球a1,a2,...,a8均为正常小球,质量均为w
则A3组为异常球组
重新分组为:
B1:a9 a10
B2:a11 a1
B3:a12 a2
====(第二次)取B2 B3 任意1组--B2 与 B1 进行比较,如果
1.1 B1=B2 则 B1 B2 为正常组,B3(a11,a2)为异常组,因为a2为正常球,所以异常球为a12
1.2 B1<B2 或者 B1>B2,则 B3 为正常组,以B1<B2为例说明
表达式 EXP0:a9+a10 < a11 +a1
========(第三次)取a9 a10 进行比较,如果
1.2.1 a9 = a10 则 a11 为异常球
1.2.2 a9 != a10 则 a11 为正常球,根据 EXP0,异常球质量小于正常球,即
a9 与 a10 轻者为异常球
2 A1<A2 或者 A1>A2,则A3为正常组;以A1<A2说明:
得表达式1: EXP1: a1+a2+a3+a4<a5+a6+a7+a8
表达式2: EXP2: a9=a10=a11=a12=w
重新分组为:
B1:a1,a2,a3
B2:a4,a5,a9
B3:a6,a7,a8
====(第二次)取B1或B3与B2比较,以B1为例说明:
2.1 B1<B2 则B3为正常组
即:
EXP4: a1+a2+a3 < a4+a5+a9
EXP5: a6=a7=a8=w
其中 a9=w
关联 EXP1: a1+a2+a3+a4< a5+a6+a7+a8
相减 a4 < -a4 + 2w
a4 < w
则异常球为 a4
2.2 B1>B2 则B3为正常组
即:
EXP6: a1+a2+a3 > a4+a5+a9
EXP7: a6=a7=a8=w
其中 a9=w
关联 EXP1: a1+a2+a3+a4< a5+a6+a7+a8
转换 EXP1: -a1-a2-a3-a4> -a5-a6-a7-a8
相加 -a4> a4-2w
a4> w
则异常球为 a4
2.3 B1=B2 则B3为异常组
得表达式3: EXP3: a1=a2=a3=a4=a5=w
关联 EXP1: a1+a2+a3+a4<a5+a6+a7+a8
得 3w<a6+a7+a8
即推出如下结论
1) 异常球质量大于正常球
2) 异常球在B3(a6,a7,a8)中
========(第三次)比较任意的两个--a6,a7,如果
a6=a7,则异常球为 a8
a6<a7, 则异常球为 a7
a6>a7, 则异常球为 a6
这是爱因.斯坦的问题吧