猴子吃桃问题

Posted 大家猴啊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了猴子吃桃问题相关的知识,希望对你有一定的参考价值。

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

# 已知第十天剩下的桃子,从后往前推断,求出第一天摘的桃子数量
peach_remained = 1
for day in range(9, 0, -1):  # 9 8 7 6 5 4 3 2 1  天
    peach_remained = (peach_remained+1)*2
print(f\'第一天一共摘了peach_remained个桃子\')

  

 

猴子吃桃--------两个猴子吃桃问题解决的详细描述

(1)猴子吃桃问题1。

猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。
第二天早上又将剩下的桃子吃掉一半,又多吃一个。
以后每天早上都吃了前一天剩下的一半另加一个。
到第10天早上再想吃时,就只剩一个桃子了。
求第一天摘了多少桃子。

 

/*
猴子吃桃问题1。

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

分析思路:使用倒推法
y表示当天的桃子数,x表示前一天的桃子数,
当天的桃子数与前一天桃子数的关系如下:每天早上都吃了前一天剩下的一半另加一个
当天的桃子数y,总等于前一天的桃子数x减去前一天桃子数的一半(x/2),再减去1
即 y=x-x/2-1    
推导出x=2*(y+1) 即前一天的桃子数与当天桃子数的关系
因为知道第10天的桃子数为1
所以我们可以从第10天开始,依次计算出第9天,在计算出第8天,依次类推,可计算出第1天的桃子数

因为当天和前一天有相同的递推公式,因此可以用循环来处理
算法:day表示第几天,y表示当天的桃子数,x表示前一天的桃子数
用循环从第10天(day=10,y=1)往前递推到第二天(day=2)
因为,当day=2时,此时的y为第2天的桃子数,此时的x为第一天的桃子数,
要注意:循环体中第一句,为递推公式,
        循环体中第二句,为了下一次的递推,将当天的桃子数设为前一天的桃子数,
        循环体中第二句保证在递推过程中y的不断变化,很关键
*/
#include <iostream>
using namespace std;
int main( )
 {
    int day,x,y; //day表示第几天,y表示当天的桃子数,x表示前一天的桃子数
    //用循环从第10天(day=10)往前递推到第二天(day=2)
    //因为,当day=2时,此时的y为第2天的桃子数,此时的x为第一天的桃子数
    for(day=10,y=1;day>1;day--)
    {x=2*(y+1);    //前一天和当天桃子数的递推公式
     y=x;           //为了下一次的递推,将当天的桃子数设为前一天的桃子数,很关键
    }
    cout<<""<<day<<"天的桃子数为:"<<x<<endl;  //输出第2天的前一天的桃子数,即第一天的桃子数
    return 0;
 }

技术分享

以上是关于猴子吃桃问题的主要内容,如果未能解决你的问题,请参考以下文章

java经典算法题——猴子吃桃

C语言猴子吃桃问题递归法

用递归函数解决猴子吃桃桃问题。问题描述如下

C语言猴子吃桃递归法

猴子吃桃问题

猴子吃桃问题