码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-03-03 19:01:08      阅读:91      评论:0      收藏:0      [点我收藏+]

标签:

(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;
 }

技术分享

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

标签:

原文地址:http://www.cnblogs.com/litao0505/p/5239484.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!