题目描述
猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。 第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。 到第N天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少桃子。
输入
N
输出
桃子总数
样例输入
10
样例输出
1534
这题的解题思路:
其实做起来很简单,既然知道了第10天猴子还剩下1个桃子,那么,
第9天猴子就剩下 (1+1)*2 = 4个桃子
第8天猴子剩下(4+1)*2=10个桃子
第7天…
第6天…
…
蛋疼用计算机简单算一下前面的数
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|
1534 | 766 | 382 | 190 | 94 | 46 | 22 | 10 | 4 | 1 |
验证了思路是正确,第1天摘了1534个桃子。开始写代码(C语言):
第n天是剩下1个桃子,然后往前面推。
方法一:for循环(因为用到减法,所以条件满足n>1就已经执行了n次)
#include<stdio.h>
int main(void)
{
int n,sum=1;
for(scanf("%d",&n);n>1;n--)
sum=(sum+1)*2;
printf("%d",sum);
return 0;
}
方法二:while循环
#include<stdio.h>
int main(void)
{
int n,sum=1;
scanf("%d",&n);
while(n>1)
{
sum=(sum+1)*2;
n--;
}
printf("%d",sum);
return 0;
}
方法三:递归 (第一次用,好骚!)
#include<stdio.h>
int peach(int num)
{
if(num==1)
return 1;
return (peach(--num)+1)*2;
}
int main(void)
{
int n,sum=1;
scanf("%d",&n);
printf("%d",peach(n));
return 0;
}