回 帖 发 新 帖 刷新版面

主题:请教算法的问题

我遇到一道例题如下:
求1/1!+1/2!+1/3!+。。。。。+1/100!的和
请问高手这类题的详细解答过程是怎么的?作为新人应该怎么去思考?欢迎新手共同讨论学习,更欢迎高手的讫临指导.

回复列表 (共15个回复)

11 楼

是该用,可惜我年龄很小,没学到结构化的SUB子程或函数FUNCTION的啊,(其实我小学还未毕业,是真的!)能否请教一下如何用FUNCTION啊~

12 楼

前几天看了哪个吃桃子的问题,好象是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
我再上机验证结果屏幕上只出现个光标没结果,请问我那里错了?我这样分析方法对吗?

13 楼

方法是对的。但

1. 你在第二个for循环的过程中,
   把第一个for循环的变量x的值作了改变
   你应该要意识到其中发生的问题。
   在这个题目里,应该在第二个for之前另加一个变量来代替x

2. mod 5 做对了,但过程中应该要注意其他步骤里是否出现非整数。

for x=1 to 99991
    y=x
    for i=1 to 5
        if y mod 5<>1 then exit for
        y=(y-1)*4/5
    next i
    if i>5 then print x
next x
print x

14 楼

可以考虑用双精度,同时把阶乘变成“阶除”,这样可能不会有太大的误差

偷个懒,代码就不写了

15 楼

13楼的大虾,不好意思啊,我没注意到一个主题最高只能评50分也下,所也你的帖子没能给你屏分啊

我来回复

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