回 帖 发 新 帖 刷新版面

主题:今天谁问我什么事情来着?

没看着.

回复列表 (共6个回复)

沙发

(2007-04-29 21:07:56)   人民群众(106016817)
有5个水手,分一堆椰子, 第一个把它分成了5份,藏起来一份,剩下1个,给了猴子,其它人如法炮制,第二天,5个水手把剩下的椰子集中起来,又分成5份,结果还是剩下一个,问一共有多少椰子?

板凳

i = 0
Do
    i = i + 4
    s = i
    For j = 1 To 5
        If s Mod 4 > 0 Then Exit For
        s = (s \ 4) * 5 + 1
    Next
Loop Until j=[color=0000ff]6[/color]  'and (s-5) mod 5=1   '后面这个条件其实是多余的.不起作用
Print s                              '代表最后一个条件:剩下除以5依然余1

得结果:  621 , 1246 , 1871 可以笔算验证一下.

3 楼

你的程序有错误,而且错误还不少。
首先,我在书上看到的答案是3121(最小的),不是621!
正确的程序应为:
CLS
i=1                   '这句很重要,因为每次分完后都有一个给猴子
DO
  i=i+5
  s=i
  FOR j=1 TO 5
      IF s MOD 5<>1 THEN EXIT FOR             
      s=(s-1)/5*4                     '每个人都藏起自己的一份,还有一个给猴子
  NEXT j
LOOP UNTIL j=6
PRINT i
END

4 楼

[quote]你的程序有错误,而且错误还不少。
首先,我在书上看到的答案是3121(最小的),不是621!
正确的程序应为:
CLS
i=1                   '这句很重要,因为每次分完后都有一个给猴子
DO
  i=i+5
  s=i
  FOR j=1 TO 5
      IF s MOD 5<>1 THEN EXIT FOR             
      s=(s-1)/5*4                     '每个人都藏起自己的一份,还有一个给猴子
  NEXT j
LOOP UNTIL j=6
PRINT i
END[/quote]
结果是15621
CLS
n = 6
DO
n = n + 1: s = n
FOR i = 1 TO 5
IF s MOD 5 <> 1 THEN EXIT FOR
s = (s - 1) / 5 * 4
NEXT i
IF s MOD 5 = 1 THEN PRINT n: END
LOOP

5 楼

是的,应该是3121.
我的程序里只错了一个字,
把5改成6就可以了.
我不小心把跳出循环的标志看漏了.

6 楼

我不知道你的程序是对照我的来改的,还是书上的答案,还是你自己写的.
因为它跟我写的代码有着惊人的相似,
唯一不同的,我走的是逆行,而你却是顺着算的.
所以我的代码可能会比你的快了那么一丁点(循环少了一点)
快了的这丁点完全没有比较的必要,所以你我答案可以说是一样的.

让我惊讶的,为什么如此相像?而偏偏又存在着这一丁点的差别.

我来回复

您尚未登录,请登录后再回复。点此登录或注册