• 猴子吃桃问题


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






  • 相关阅读:
    Spring Cloud
    Hibernate 缓存
    Spring 快速入门
    Junit 单元测试
    Spring Cloud 笔记
    Swagger SpringBoot 集成
    Apache Shiro 权限框架
    Spring Boot
    跨域问题
    BeX5 常见问题解决办法
  • 原文地址:https://www.cnblogs.com/Truedragon/p/11899250.html
Copyright © 2020-2023  润新知