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