朋友提了个智力问题,苦想后无解,请大家帮忙!

richboy2003 2004-04-13 08:34:54
题目如下:有十二个球,其中一个重量不同,其余十一个重量相同,个一部天平,只许称三次,请找出不同的一个!~!
这个题的难点在重量不同的那个球不知道是轻是重,请大家帮忙想想看。(如果有兴趣的话可以用vb写个算法小程序发上来)
...全文
119 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
XmagicX 2004-04-13
  • 打赏
  • 举报
回复


不知道重量,光是比较不等的情况,就至少是4步了
二师兄的老公 2004-04-13
  • 打赏
  • 举报
回复
看了小马哥的链接,汗!
richboy2003 2004-04-13
  • 打赏
  • 举报
回复
alicky(周松) :你的还是错的,错在第2步!如果那个不同重量的球是轻的,你第2次称天平就是平横的,你还有一步了。你只知道轻球在那6个球里!你仔细想想
yoki 2004-04-13
  • 打赏
  • 举报
回复
http://www.trucy.net/cgi-bin/forum/view.cgi?forum=6&topic=17
pigpag 2004-04-13
  • 打赏
  • 举报
回复
听说是某个公司的招聘题目。还要对球进行编号,非常麻烦。楼上说的方法不正确,因为那个特殊的球也可能比普通球轻。
cigoner 2004-04-13
  • 打赏
  • 举报
回复
需要多称一次吧。。。想不出办法~
Alicky 2004-04-13
  • 打赏
  • 举报
回复
随便再说一下,这个是用不着写程序的,要实践。如果你还不懂的话,给我信息。
Alicky 2004-04-13
  • 打赏
  • 举报
回复
第一次称:把十二个球分成两份,天平一边一份,重的那六个球拿出来。
第二次称:把第一次称出来的六个球再分成两份,天平一边一份,重的那三个球再拿出来。
第三次称:再第三次拿出来的三个球中,随便拿两个出来称,如果天平两边一样重,说明剩下的那个就是你要找的,如果天平两边不一样重的话,那个重的就是你要找的。这一步是关键,你仔细想想。
cityou 2004-04-13
  • 打赏
  • 举报
回复
以前有人问过我这个问题,我也一直没整明白……
cityou 2004-04-13
  • 打赏
  • 举报
回复
用一次称其中两份不能知道不同的球在哪一堆里。a,b,c三堆,如果a,b称称平,那么c里有一个不同;但ab不平呢?a里有不同还是b里有不同?
richboy2003 2004-04-13
  • 打赏
  • 举报
回复
"先将小球分成三份,秤其中的两份可以知道重量不同的球在那一份中"----第一步就错的!说了不知道重量不同的球是轻还是重。天平不平,你知道重量不同的球在那一份中?-----作为程序员你的想法也太简单了,搞笑
GERY2003 2004-04-13
  • 打赏
  • 举报
回复
先将小球分成三份,秤其中的两份可以知道重量不同的球在那一份中
从那一份取出两个秤一下,如果重量相同,那么球就在剩下的那两个中
再从剩下的两个当中取一个,与刚才秤的两个球的其中一个再秤,就能知道
重量不同的球球是那个
zhangsunphone 2004-04-13
  • 打赏
  • 举报
回复
这个问题以前看过了,方法很多啊。
paocai2003 2004-04-13
  • 打赏
  • 举报
回复
分析的非常完整,谢谢 northwolves(野性的呼唤),也谢谢作者.供我学习参考.
UP!
northwolves 2004-04-13
  • 打赏
  • 举报
回复
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

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧