栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

每日经典算法题(十七) 猴子吃桃

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

每日经典算法题(十七) 猴子吃桃

每日经典算法题(十七) 猴子吃桃

猴子:Monkey 递归算法:Recursion Algorithm

题目

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

程序分析

采取逆向思维的方法,从后往前推断,列出通项公式。

思路

通过题干我们可以得到基本信息是若有 n 个桃子,第一天则吃了 n/2 + 1 个桃子,即剩下 n/2 - 1 个桃子。

若假设某一天剩下的桃子数为 x,前一天剩下的桃子数为 y,根据上面的关系我们可以得到:
( x + 1 ) ∗ 2 = y (x + 1)* 2 = y (x+1)∗2=y
简单计算一下,我们已知最后一天剩 1 个,根据推算的公式可以得到倒数第二天剩下 4 个,同理根据递归算法即可求出第一天剩下多少个。

在这里需要注意的是,猴子是到第十天想吃(还没吃)的时候发现只剩一个了,所以循环的次数要注意是 9 次。

循环递归计算之后输出结果即可。若想查看每天的结果也可输出查看

代码示例
public class Q17_Recursive_MonkeyPeaches {
    public static void main(String[] args) {
        int sum = 1;
        for (int i =1;i<10;i++){
            sum = (sum + 1) * 2;
            System.out.print(sum+"t");
        }
        System.out.println("第一天一共摘了"+sum+"个。");
    }
}
输出结果
4	10	22	46	94	190	382	766	1534	第一天一共摘了1534个。
  • Day17 打卡成功!
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/284175.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号