猴子吃桃问题


题目描述
猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。 第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。 到第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语言最大值溢出了。







免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM