主题:求教:猴子吃桃的问题,谢谢
新人 [专家分:30] 发布于 2005-05-07 15:01:00
原题:
小猴子第一天摘下若干桃子,当即吃掉一半,又多吃一个.第二天早上又将剩下的桃子吃一半,又多吃一个.以后每天早上吃前一天剩下的一半另一个.到第10天早上猴子想再吃时发现,只剩下一个桃子了.问第一天猴子共摘多少个桃子.
书上的程序是:
x=1
FOR n%=10 TO 2 STEP -1 ----(2)
x=(x+1)*2
NEXT n%
PRINT "The number of perchers is"; x
END
结果=1534
____________________________________________________________________
可是我觉得1534只是第一天猴子吃剩后的桃子数啊,此题问的是第一天猴子共摘了的桃子数,即猴子没吃桃子以前桃子的总数.
所以(2)式应换成: FOR n%=10 TO 1 STEP -1或 FOR n%=1 TO 10
结果=2046
_______________________________________________________________________
小弟迷惑不解,请各位大侠不吝指正.
_______________________________________________________________________
思路: 设猴子第一天摘下M只桃子. | M=2*(D1+1)
| D1=2*(D2+1)
D1(第天吃剩下的桃子数):M-(M/2+1)=M/2-1 | D2=2*(D3+1)
D2:D1-(D1/2+1)=D1/2-1 | ...... ......
... ... ...... | D10=1
D10:1 |
|
谢谢大家.
回复列表 (共20个回复)
沙发
啊远 [专家分:2610] 发布于 2005-05-07 16:01:00
看清楚了没 <<到第10天早上猴子"想再吃时发现",只剩下一个桃子了.>> 即弟 10 并没有吃!
==========================================
第十天只剩下 1 个桃子了! 所以 x 才等于 1。
==========================================
第十天没有吃所以语句 FOR 为 FOR n%=10 TO 2 STEP -1
而不是 FOR n% = 10 TO 1 STEP -1
即只做9天的运算!第 10 天没有吃!不用算!
板凳
新人 [专家分:30] 发布于 2005-05-07 16:54:00
谢谢这位朋友指点.
让我再想一想.总觉得有点问题.
我是按剩余量来设的啊: 第一天摘的桃子总数.M=2* (D1+1)------(1)
第一天剩余 D1=2*(D2+1)------(2)
D2=2*(D3+1)------(3)
...........
D9=2*(D10+1)-----(10)
第十天剩余 D10=1 ------(11)
第10天1个桃子是初值,代入D9,运算直至M,是要10步啊.
3 楼
啊远 [专家分:2610] 发布于 2005-05-07 17:20:00
我的意思是说!第十天是已经知道的数量了!所以将其值直接代入表达式做9次运算就行了!
你的推法不正确!第1天本来就是一个未知数!必须以第10天剩下的数量为基数来计算!
跟本不可能从第一天来推算的!
4 楼
新人 [专家分:30] 发布于 2005-05-07 17:31:00
啊远,你好.谢谢指导.
但我想做9次的话只会求得D1,即第天剩余的桃子,因为猴子是当即吃掉的.
而此题要求的是猴子在第一天摘取的"若干桃子",也即M
请你再看看,谢谢.
5 楼
啊远 [专家分:2610] 发布于 2005-05-07 17:33:00
程序求出的本来就已经是 M 了! 当天吃下的数量是 M 的一半多一个!
6 楼
新人 [专家分:30] 发布于 2005-05-07 17:35:00
关键是一个次数的问题.
第一天存在的桃子数和猴子所摘的"若干桃子"差了一次.
递推公式是一样的.
7 楼
新人 [专家分:30] 发布于 2005-05-07 17:37:00
可是啊远先生,我刚排的数列显示,从M到程序第一次进入的D9间,是10次的啊.
8 楼
啊远 [专家分:2610] 发布于 2005-05-07 17:45:00
用 a 来给你记数!
a=0
x=1
FOR n% = 10 TO 2 STEP -1 a = a
x = (x+1)*2
a = a + 1
NEXT n%
PRITT "a = "; a
PRINT "The number of perchers is"; x
END
9 楼
新人 [专家分:30] 发布于 2005-05-07 17:51:00
我写上试试.
10 楼
啊远 [专家分:2610] 发布于 2005-05-07 18:03:00
a 是不是等于 9 问?????是九次吧!你多多练习一下 FOR 了!
你还不能很好的控它的循环次数!
FOR 循环变量 = 起始值 TO 终值 STEP 步长
循环(子语句集)
程序第一次执行到这里时: 循环变量和超始值相等
NEXT 程序执行到这里才导至 循环变量减 1
例:
FOR n% = 10 TO 2 STEP -1
IF n% = 10 THEN PRINT "第一次";
PRINT n%
NEXT
PRINT "循环结束 n = "; n
Output:
====================================
第一次 10
9
8
7
6
5
4
3
2
循环结束 n = 1
=====================================
知道为什么 n = 1 ,因为循环结束时执行了 NEXT 导致循环变量 n 的当前值 2 再减 1
所以循环结束后 n = 1;
再把程序改成:
========================
FOR n% = 10 TO 2 STEP -1
IF n% = 10 THEN PRINT "第一次";
PRINT n%
IF n% = 2 THEN GOTO kkk
NEXT
kkk:
PRINT "循环结束 n = "; n
Output:
====================================
第一次 10
9
8
7
6
5
4
3
2
循环结束 n = 2
=====================================
明白了吗?
我来回复