回 帖 发 新 帖 刷新版面

主题:求教:猴子吃桃的问题,谢谢

原题:
   小猴子第一天摘下若干桃子,当即吃掉一半,又多吃一个.第二天早上又将剩下的桃子吃一半,又多吃一个.以后每天早上吃前一天剩下的一半另一个.到第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个回复)

沙发

看清楚了没 <<到第10天早上猴子"想再吃时发现",只剩下一个桃子了.>> 即弟 10 并没有吃!
==========================================

第十天只剩下 1 个桃子了! 所以 x 才等于 1。

==========================================
第十天没有吃所以语句 FOR 为 FOR n%=10  TO  2  STEP  -1

而不是 FOR n% = 10 TO 1 STEP -1

即只做9天的运算!第 10 天没有吃!不用算!

板凳

谢谢这位朋友指点.
让我再想一想.总觉得有点问题.
我是按剩余量来设的啊:   第一天摘的桃子总数.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 楼

我的意思是说!第十天是已经知道的数量了!所以将其值直接代入表达式做9次运算就行了!

你的推法不正确!第1天本来就是一个未知数!必须以第10天剩下的数量为基数来计算!
跟本不可能从第一天来推算的!

4 楼

啊远,你好.谢谢指导.
但我想做9次的话只会求得D1,即第天剩余的桃子,因为猴子是当即吃掉的.
而此题要求的是猴子在第一天摘取的"若干桃子",也即M
请你再看看,谢谢.

5 楼

程序求出的本来就已经是 M 了! 当天吃下的数量是 M 的一半多一个!

6 楼

关键是一个次数的问题.
第一天存在的桃子数和猴子所摘的"若干桃子"差了一次.
递推公式是一样的.

7 楼

可是啊远先生,我刚排的数列显示,从M到程序第一次进入的D9间,是10次的啊.

8 楼

用 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 楼

我写上试试.

10 楼

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
=====================================
明白了吗?

我来回复

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