原题目:猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。 第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。 到第N天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少桃子。
输入
N
输出
桃子总数
样例输入
10
样例输出
1534
解题:其实这道题不难,我首先想到的是用数学办法去解它,按照正常的顺序设出总数sum,然后列出第一天、第二天、第三天吃过之后的数量,列出三个式子之后基本上就可以找到规律,然后总结出一个计算公式,当然这不难。但是,值得注意的是,这是一道编程题而不是数学题,数学题只要最后求出答案就好,编程题他是需要一个通用的算法,那说实话总结公式法就是不对的吗,当然不是,只是如果更复杂的题呢?你总结不出来公式怎么办?所以这道题给了我很大的一个启示,就是在编程的过程中最好思想简单化,具体的说,反向来看这道题无非就是一道l简单累加问题,所以应该反着来想:初始量sum=1,每天都要加上比前一天剩下多1的2倍,用一个循环累加就好了,在这里要注意控制循环的条件,应该要循环n-1次。(这里不做时间复杂度的分析)
源代码:
#include<stdio.h>
int main()
{
int sum=1,n;
scanf("%d",&n);
for(int i=1;i<n;i++)
{
sum=(sum+1)*2;
}
printf("%d",sum);
}