猴子吃桃问题

java February 16 2012


今天在网上看到这个问题,比较有意思,记下。猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少?采取逆向思维的方法,从后往前推断。分析:第10天:1个第9天:4个第8天:10个……………….第1天:X个也就是说,要知道第一天的个数,就得知道第二天的个数,依此类推,就需要从最后一天即第10天开始计算,也就是倒推,看样子用递归算法比较简单。private int process(int day) { if(day == 10) { return 1; } day = (day > 10   day < 1) ? 10 : day;//这行为可选,只是为了使示例代码更灵活健壮 return (process(day + 1) + 1) * 2;}或者可以更简短:private int process(int day) { return (day == 10) ? 1 : (process(day + 1) + 1) * 2;//不考虑day > 10   day < 1的情况}看到也有人不用递归,想想也可以,写了另一段代码:int amount = 1;//最后一天剩余数for(int day = 10 ; day > 0 ; day–) { amount = (day == 10) ? 1 : (amount + 1) * 2;}当然也可以更简短:int amount = 1;//最后一天剩余数for(int day = 9 ; day > 0 ; day–) { amount = (amount + 1) * 2;}

原文链接:http://ichatter.cn/e7-8c-b4-e5-ad-90-e5-90-83-e6-a1-83-e9-97-ae-e9-a2-98.html


欢迎来到阿J小虫的博客

Follow @ichatter on GitHub

最新评论

推荐内容