这是一个猴子吃桃的问题

题目描述
猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。 第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。 到第N天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少桃子。
输入
N
输出
桃子总数
样例输入
10
样例输出
1534


问题分析:
1,利用递归思想解决:
 1 #include<stdio.h>
 2 int eat(int N);
 3 int main()
 4 {
 5     int N,num;
 6     scanf("%d",&N);
 7      printf("%d",eat(N));
 8     return 0;
 9 }
10 int eat(int N)
11 {
12     if(N==1) return 1;
13         while(N!=1)
14      {
15          return (eat(N-1)+1)*2;
16          N-1;
17      }
18 }

将N理解为天数,从前往后思考,每一天都是前一天+1后的两倍,且第一天只有一个桃子且没有吃,所以递归N-1次;

2,用for循环解

1 include <stdio.h>
2 void main()
3 {int n,s=1,i;//n为天数,s为最后留下的
4 scanf(“%d”,&n);
5 for(i=0;i<n-1;i++)
6 s=(s+1)*2;
7 printf(“%d”,s);
8 }

这里如果用python的话4行就搞定了

n=1
for day in range(1,10):
    n = (n+1)*2
print(n)

思路和递归的思想类似,也是反向思维,从第一天往后推,当天数少时递归和for循环效率应该差不多,但当天数很大时递归会出现错误,具体原因我还没理解,我推测是C语言最大值溢出了。






posted @ 2019-11-20 17:31  TrueDZ  阅读(2141)  评论(0编辑  收藏  举报