猴子吃桃问题(C++)
- 格式:pdf
- 大小:83.41 KB
- 文档页数:4
s s = s − ( + 1), 将此式转化为s = 2 s + 2 2
i i +1 i i i +1
则有:
s = 1(i = 30) s = 2 s + 2(1 ≤ i<30)
i i i +1
此时由于最后一天(第 30 天的)桃子总数是已知的,根据 上述公式可推出第 29 天的桃子总数; 而根据第 29 天的又可以推 出第 28 天的桃子总数,……,重复上述工作,就可以推出第 1 天的桃子总数。推导过程如下图:
i
i +1
s =s
i +1
i
3) 输出s 的值,即为所求结果。
1
相应程序如下: #include <stdio.h> #include <stdlib.h> #define N 30 void main() { int i,si,s; s=1;//第 30 天桃子总数为 1 个
for(i=N-1;i>=1;i--) { si=2*s+2; s=si; printf("第%2d 天的桃子总数为%d 个\n",i,s); } printf("\n 共%d 天,第一天的桃子总数为%d\n",N,si); system("pause");
}
天数 i 30 29 28 ... ... 1
第 i 天桃子未吃前总数 si
s =1
30
s = 2× s ) 2 = 4 ( +
29 30
s = 2 × s ) 2 = 10 ( +
2应算法流程如下:
1) s = 1,即最初的s 为1
30 i +1
2)从 29循环到1,反复执行如下操作: i s = 2s + 2
猴子吃桃问题
猴子吃桃问题: 猴子第一天摘下若干个桃子, 当即吃了一半, 还不过瘾, 又多吃了一个。 第二天早上又将剩下的桃子吃掉一半, 又多吃了一个。以后每天早上都吃了前一天剩下的一半多一个。 到第 30 天早上想再吃时,见只剩下一个桃子了。求第一天共摘 了多少。 解:根据题意,设 si 为第 i 天所拥有的桃子数(注:该处某 天拥有的桃子数是指当天未吃之前的桃子总数),则前后相邻两 天之间的桃子数有如下关系: