小工具知识网

当前位置: 首页 > 行业知识 > 猴子吃桃问题(python版)

行业知识

猴子吃桃问题(python版)

2026-11-05 01:15:26 来源:互联网转载

文章预览:

  • 题目
  • 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​=2∗an​+2

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

          运行结果

          第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)))

          运行结果

          第10天剩一个那总共有1534

          python解法三:

          让我们算最终解法:复杂度最低的算法,我们干嘛不寻找规律完全解出这个通项岂不美哉。

          由上面我们推导出了公式 a n = 3 / 2 ∗ 2 n − 2 a_n=3/2*2^n-2 an​=3/2∗2n−2

          那编程就容易多了

          代码如下:

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

          运行结果

          输入10

          第10天剩一个那总共有1534

上一篇:滑稽的书怎么读?

下一篇:每周一算法:双向广搜