当前位置:   article > 正文

猴子吃桃问题(python版)_python猴子吃桃问题

python猴子吃桃问题

题目

猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。
第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求原来它一共摘了多少只桃子。

这是一个比较简单的python习题

python解法一:

我们从后往前想,最后一次不就剩1个了吗,那么前一天剩多少个 和容易想到2*1+2,那么我们倒序想 就是 a n + 1 = 2 ∗ a n + 2 a_{n+1}=2*a_n+2 an+1=2an+2

def count(day):
    a=1
    for i in range(day-1):
        a=a*2+2
    return a
print("第10天共摘了{}桃子".format(count(10)))

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

运行结果

第10天共摘了1534桃子

python解法二:

我们可以使用递归的办法,每次减小天数,天数为1的时候是1
代码如下:

def  monkey_count(day):
    if day==1:
        return 1
    else:
        return  2*monkey_count(day-1)+2
    
print("第{}天剩一个那总共有{}".format(10,monkey_count(10)))



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

运行结果

第10天剩一个那总共有1534

python解法三:

让我们算最终解法:复杂度最低的算法,我们干嘛不寻找规律完全解出这个通项岂不美哉。
在这里插入图片描述
由上面我们推导出了公式 a n = 3 / 2 ∗ 2 n − 2 a_n=3/2*2^n-2 an=3/22n2
那编程就容易多了
代码如下:

a=int(input())
count=3*2**(a-1)-2
print("第{}天剩一个那总共有{}".format(a,count))

  • 1
  • 2
  • 3
  • 4

运行结果

输入10
第10天剩一个那总共有1534

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/424085
推荐阅读
相关标签
  

闽ICP备14008679号