猴子搬香蕉

来源:互联网 发布:随机梯度下降算法参数 编辑:程序博客网 时间:2024/06/02 10:16

一个小猴子边上有100根香蕉,它要走过50米才能到家, 每次它最多搬50根香蕉,(多了就被压死了),它每走1米就要吃掉一根,请问它最多能把多少根香蕉搬到家里。

提示:他可以把香蕉放下往返的走,但是必须保证它每走一米都能有香蕉吃。也可以走到n米时,放下一些香蕉,拿着n根香蕉走回去重新搬50根。

我的推理过程: 以每次小猴子搬最多香蕉为前提, 则100根香蕉需要2趟, 在距离为1米的情况下, 小猴子第1趟搬50根到1米处,消耗1根,带回1根走到原点, 刚好又消耗1根,再将第2趟50根搬到1米处, 这时剩下97根..以此类推, 设当前的总数需要 x 趟才能搬到 1 米, 则消耗的数量为 2x - 1, x 在此题中为 100 / 50 = 2..根据以上关系, 推出下列程序(vbs), 推导结果和网上搜索到的答案是一致的(16根).

Option Explicit

'代码: 萧月痕(xiaoyuehen)
'msn: xiaoyuehen(at)msn.com
'日期: 2006-2-22

Dim intTotal
Dim intEvery
Dim intIndex
Dim intMod

Dim strMessage

intTotal = 110
intEvery = 50

Dim bFlag
bFlag = True

For intIndex = 1 to 50
  If intTotal Mod intEvery = 0 Then
    intMod = intTotal / intEvery
  Else
    intMod = intTotal / intEvery + 1
  End If

  intTotal = intTotal - (2 * intMod - 1)
  If (intMod = 1) And (bFlag = True) Then
    strMessage = strMessage & "* 走了 " & intIndex & " 米, 还剩香蕉 " & intTotal & " 根" & vbCrLf &

vbCrLf
    bFlag = False
  End If
Next

strMessage = strMessage & "* 最后还剩香蕉 " & intTotal & " 根"
MsgBox strMessage

原创粉丝点击