Welocome to my blo|

TrueDZ

园龄:5年3个月粉丝:7关注:3

这是一个猴子吃桃的问题

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






本文作者:TrueDZ

本文链接:https://www.cnblogs.com/Truedragon/p/11899250.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   TrueDZ  阅读(2166)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起