题目内容
猴子吃桃问题:有一堆桃子不知数目,猴子第一天吃掉一半,觉得不过瘾,又多吃了一只,第二天照此办法,吃掉剩下桃子的一半另加一个,天天如此,到第十天早上,猴子发现只剩一只桃子了,问这堆桃子原来有多少个?
解析:
|
解:本题的算法如下: 第一步:a1←1;{第10天的桃子数,a1的初值} 第二步:i←9;{计数器初值为9} 第三步:a0←2×(a1+1);{计算当天的桃子数} 第四步:a1←a0;{将当天的桃子数作为下一次计算的初值} 第五步:i←i-1; 第六步:若i≥1,转第三步; 第七步:输出a0的值. 伪代码如下: a1←1 i←9 If i≥1 Then a0←2×(a1+1) a1←a0 i←i-1 End If Print a0 流程图如下图所示:
分析:此题粗看起来有些无从着手的感觉,那么怎样开始呢?假设第一天开始时有a1只桃子,第二天有a2只,…,第9天有a9只,第10天有a10只.在a1,a2,…,a10中,只有a10=1是知道的,现要求a1,而我们可以看出a1,a2,…,a10之间存在一个简单的关系: a9=2×(a10+1), a8=2×(a9+1), … a1=2×(a2+1). 也就是:ai=2×(ai+1+1),i=9,8,7,6,…,1. 这就是此题的数学模型. 再考查上面从a9,a8直至a1的计算过程,这其实是一个递推过程,这种递推的方法在计算机解题中经常用到.另一方面,这九步运算从形式上完全一样,不同的只是ai的下标而已.由此,我们引入循环的处理方法,并统一用a0表示前一天的桃子数,a1表示后一天的桃子数. |
提示:
|
这类题的解法是一个从具体到抽象的过程,具体方法是: (1)弄清如果由人来做,应该采取哪些步骤; (2)对这些步骤进行归纳整理,抽象出数学模型; (3)对其中的重复步骤,通过使用相同变量等方式求得形式的统一,然后简练地用循环解决. |