主题:请教算法的问题
suiyue
[专家分:20] 发布于 2006-06-12 22:00:00
我遇到一道例题如下:
求1/1!+1/2!+1/3!+。。。。。+1/100!的和
请问高手这类题的详细解答过程是怎么的?作为新人应该怎么去思考?欢迎新手共同讨论学习,更欢迎高手的讫临指导.
回复列表 (共15个回复)
11 楼
JRX [专家分:180] 发布于 2006-06-17 22:07:00
是该用,可惜我年龄很小,没学到结构化的SUB子程或函数FUNCTION的啊,(其实我小学还未毕业,是真的!)能否请教一下如何用FUNCTION啊~
12 楼
suiyue [专家分:20] 发布于 2006-06-18 23:30:00
前几天看了哪个吃桃子的问题,好象是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 楼
moz [专家分:37620] 发布于 2006-06-19 14:05:00
方法是对的。但
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 楼
staa [专家分:3690] 发布于 2006-06-22 00:23:00
可以考虑用双精度,同时把阶乘变成“阶除”,这样可能不会有太大的误差
偷个懒,代码就不写了
15 楼
suiyue [专家分:20] 发布于 2006-06-24 06:22:00
13楼的大虾,不好意思啊,我没注意到一个主题最高只能评50分也下,所也你的帖子没能给你屏分啊
我来回复