找鸡蛋:一个智力题的编程求解解决办法
发布时间:2011-07-03 09:16:52 文章来源:www.iduyao.cn 采编人员:星星草
找鸡蛋:一个智力题的编程求解
有12个鸡蛋,其中有一个和其他不一样重(或重或轻),给你一个天平,只准你称3次,然后找出那个和其他不一样重的鸡蛋。并且知道它是比其他重还是比其他轻!
我想了半天,没想出来,感觉去上网查或问别人太没劲,就想着是否可以用搜索穷举出结果,我初步的想法是:
1 测试数据集 12
2 数据表示 composite 比较
3 行为集: 比较,剪枝,添加,判断,分组
4 规则:满足 与否
穷举各种分组策略,记录行为轨迹,对成功的,在其他11组上验证。
关键是行为集的定义
现在向大家求教,望不吝赐教!
------解决方案--------------------
等看了答案就知道穷举法根本不可行
建议看看答案吧,看完答案能编出算法就不简单
------解决方案--------------------
用递归的方法还是很容易实现的。
思路定好了,用什么语言都很容易实现。
比如说VB的代码就可以这样写:
Option Explicit
Private Sub cmdEgg12_Click()
Dim i As Long
Dim iMin As Long
Dim iMax As Long
Dim j As Long
Dim jMin As Long
Dim jMax As Long
Dim k As Long
Dim arrData() As Long
iMin = 0
iMax = 11
ReDim arrData(iMax)
For i = iMin To iMax
arrData(i) = 100
Next i
arrData(4) = 90
'arrData(7) = 110
jMin = iMin
jMax = Fix(iMax / 2)
Debug.Print vbCrLf
k = EggOut(arrData(), iMin, iMax, jMin, jMax)
Debug.Print "* " & iMin & "; " & iMax & "; " & jMin & "; " & jMax & "; " & k
End Sub
Private Function EggOut( _
arrData() As Long, _
ByRef iMin As Long, _
ByRef iMax As Long, _
ByRef jMin As Long, _
ByRef jMax As Long _
) As Long
Dim lngSum As Long
lngSum = 0
'' Sum it
lngSum = EggSum(arrData(), jMin, jMax)
Debug.Print "* " & jMin & " " & jMax & " " & lngSum
'' Same data?
If lngSum = ((jMax - jMin + 1) * 100) Then
iMin = jMax + 1
iMax = iMax
jMin = iMin
jMax = jMin + Fix((iMax - jMin) / 2)
'' Not the same?
Else
iMin = iMin
iMax = jMax
jMin = iMin
jMax = jMin + Fix((iMax - jMin) / 2)
End If
'' Continue?
If ((jMax - jMin) <> 1) Then
EggOut = EggOut(arrData(), iMin, iMax, jMin, jMax)
Else
'' Result
Debug.Print "*Result* " & jMin & " " & jMax & " " & lngSum
Debug.Print "*Result* " & jMin & " " & arrData(jMin) & "; " & jMin + 1 & " " & arrData(jMin + 1) & "; " & jMin + 2 & " " & arrData(jMin + 2)
End If
End Function
Private Function EggSum( _
arrData() As Long, _
iMin As Long, _
iMax As Long _
) As Long
Dim i As Long
Dim lngSum As Long
lngSum = 0
For i = iMin To iMax
lngSum = lngSum + arrData(i)
Next i
EggSum = lngSum
End Function
------解决方案--------------------
如果想优化一下,那就写成这样:
Option Explicit
Private Sub cmdEgg12_Click()
Dim i As Long
Dim iMin As Long
Dim iMax As Long
Dim j As Long
Dim jMin As Long
Dim jMax As Long
Dim k As Long
Dim arrData() As Long
iMin = 0
iMax = 11
ReDim arrData(iMax)
For i = iMin To iMax
arrData(i) = 100
Next i
arrData(4) = 90
'arrData(7) = 110
'' Check ranage
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
现在神经网络有什么的用途
神经网络听说不少了,可是就没听说应用什么上面了.
神经网络真的有作用吗?
------解决方案----------...
-
懂得DTP和测试的人过来指点哈
我现在招聘了两家公司一个是DTP排版,一个是博彦的软件测试在武汉,我想问哈哪个公司好一点?发展空间更...
-
SOS~~关于蚁群算法解决机器人路径规划问题的参数设置
rt。急求高人解答~·
有大大知道么?
各个常量参数的设置应该是怎样的?
...
-
我能学人工智能吗?
我对人工智能有点兴趣,本来想考研的时候选人工智能的研究方向的,但是由于我本科专业是软件工程,并没有学人工智能,...
-
如何用matlab编写模糊关系中的合成运算
如题,想请教各位高手,怎么来求两个矩阵的合成运算
------解决方案--------------------
...
-
用什么方法识别是不是人?
哪位大虾能指点:
我现想识别人和桌椅等,就是我现在想做一小实验,就是当人在他前它知道是人,把其他无生命的物...
-
ANFIS
谁有ANFIS MATLAB源代码啊?不胜感激
------解决方案--------------------
直接在help文件里面anfis就可以了撒
自己看看...
-
谁了解BP神经网络啊?
谁了解BP神经网络啊?
一个朋友写了篇论文,让我帮看看,修正一下。
可是我一点也不懂。丢人啊!
------解决方案---...
-
请问各位在哪里可以下载到 Visual Lisp 编程工具
本人最近正在学习人工智能,但是一直用VC++做为练习工具,现在想用一下Lisp,请求各位...
-
求BP仿真算法
网上只有大量的BP学习算法
我已经写了一个BP学习算法程序
网络可以训练成功
但是训练好的网络如何根据输入产生输...