回 帖 发 新 帖 刷新版面

主题:求教

前几天看了哪个吃桃子的问题,好象是5个猴子遇到一堆桃子,约好明天早上一起分,结果晚上第一个猴子起来将桃子分5份还剩一个就将剩的哪个吃掉还藏了一份然后继续去睡觉,第2个猴子也是这样,....第5个也这样.第二天早上它们又将桃子分成5份,结果还是多一个,问桃子至少有好多个.
面对这个问题我想了很久依然没解决出来.我是这样分析的:
前一天的桃子数-多的那1个再除5乘4就是第二天的桃子总数也就是x→(x-1)4/5.于是我就想我是不是可以用循环把这个表达式表示出来呢?那就是
for i=1 to 5
x=(x-1)*4/5
next i  这样就可以得到第6天的桃子总数了
我又想到每天的桃子数除5都余1 那么是不是可以列出
if x mod 5=1 then print x
如果将x的范围固定在1-99991间查找,是不是定能查找得出来呢?
我就列出式子:
for x=1 to 99991
 for i=1 to 5
 x=(x-1)*4/5
 next i
if x mod 5=1 then print x
next x
print x
end
我再上机验证结果屏幕上只出现个光标没结果,请问我那里错了?我这样分析方法对吗?
最后的结果是多少呢??

回复列表 (共5个回复)

沙发

如果将x的范围固定在1-99991间查找,是不是定能查找得出来呢?
其实在不知道具体范围的情况下,最好是用DO

板凳

具体怎么解决这个问题啊?

3 楼

我好像在你另一张贴解释过。

4 楼


我想知道答案啊

5 楼

do
  x=x+1             '[color=ff00ff]x为原有总桃数[/color]
  y=x               '[color=ff00ff]为了保留x的值不受改变,另找变量代替[/color]
  for i=1 to 5      '[color=ff00ff]五个猴子五次分桃[/color]
      if y mod 5<>1 then exit for  '[color=ff00ff]不符合这个条件就无法吃掉一个还能平均分五份了[/color]
      y=(y-1)*4/5   '[color=ff00ff]吃掉一个平分五份,拿走一份剩四份[/color]
  next
loop until i>5 and y>0  '[color=ff00ff]在这里,只需要一个答案就行了,没必要找太多答案[/color]
print x
'[color=ff00ff]能分五次后,还有桃子剩的就是答案了。[/color]
'[color=ff00ff]还有什么不明白的吗?[/color]

还有一些事情需要说一说的,
就是关于变量类型的取值范围的问题。
很多时候,在可见到范围较大的可能情况下,应该使用大范围的变量,
但大范围变量有个缺点就是会影响运算速度。
在这一道题里,还是建议使用长整型变量 deflng a-z
因为当短整形的计算值越过了范围32767后,就会进入长整形的区域,
这个时候就很容易出错了。
我之前试过,
就 y=(y-1)*4/5 这一条算式,
当 y 的值足够大的时候,运算就失效了。
呵呵,不可思议吧?

我来回复

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