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次;spa
2,用for循环解code
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 }
思路和递归的思想相似,也是反向思惟,从第一天日后推,当天数少时递归和for循环效率应该差很少,但当天数很大时递归会出现错误,具体缘由我还没理解,我推测是C语言最大值溢出了。blog