zoukankan      html  css  js  c++  java
  • 猴子吃桃问题

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






  • 相关阅读:
    nodejs中exports与module.exports的区别
    Webpack--自学笔记
    cookie、sessionStorage、localStorage 详解
    JavaScript中URL的解码和编码
    javascript中怎么判断对象{}为空
    关于获取、设置css样式封装的函数入门版
    多行文本溢出显示省略号(…)
    前端优化的问题
    volatile
    MySQL(六) decimal数据默认处理
  • 原文地址:https://www.cnblogs.com/Truedragon/p/11899250.html
Copyright © 2011-2022 走看看