猴子吃桃
猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将第一天剩下的桃子吃掉一半,又吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,发现只剩下一个桃子了。编写程序求猴子第一天共摘了多少个桃子。
思路:开始时是从前往后想,先设第一天摘的桃子为x,吃了x/2+1;然后第二天吃了[x-(x/2+1)]/2+1个,即(x-2)/4个...到第十天剩下1个,可是这样想的话算法太复杂了。后来换位思考了下,从后往前想,第九天剩1个,第一天的桃子数是第二天桃子数的加1后的2倍,即x1=(x2+1)*2。
#include <stdio.h> main() { int day,x1,x2; //day=9; scanf("%d",&day); x2=1; while(day>0) { x1=(x2+1)*2; x2=x1; day--; //从后往前推所以天数递减 } printf("the total is %d\n",x1); }
结果
E:\c++>a 9 the total is 1534