猴子吃桃

【需求/说明】:  一只猴子摘了一堆桃子,每天吃掉其中的一半然后再多吃一个,第二天则吃剩余的 一半然后再多吃一个,...直到第10天,猴子发现只有一个桃子了。问这只猴子在第一天摘了多少个桃子?

 【需求分析】:这只猴子共用了10天吃桃子,最后一天剩余1个桃子,要想求出第一天的桃子数,就要先求出第2天剩余的桃子数,...。假设an表示第n天剩余的桃子数量,n=1~10,则有如下关系:

  a1=(a2+1)x2;

  a2=(a3+1)x2;

    ......

  a9=(a10+1)x2;

  a10=1;

从上述式子可知,只能通过倒推来求得第一天的桃子数。这在程序上就需要借助于递归算法。

那么我们就可以编写一个算法用于计算猴子吃桃问题。算法的示例代码如下:


 

 1 /**
 2  * 
 3  */
 4 package edu.aeon.algorithm;
 5 
 6 import java.util.Scanner;
 7 
 8 /**
 9  * @author work
10  * 创建于: 2017年10月17日 下午6:51:56
11  * by lzj
12  * 需求/说明: 
13  * 某天一只猴子摘了一堆桃子,每天吃掉其中的一半然后再多吃一个,第二天则吃剩余的
14  * 一半然后再多吃一个,...直到第10天,猴子发现只有一个桃子了。问这只猴子在第一
15  * 天摘了多少个桃子?
16  */
17 public class MonkeyEatPeaches {
18     //定义一个算法
19     /**
20      * 
21      * at 2017年10月17日 下午6:57:55 by lzj
22      * @parameters1 int n
23      * @return int
24      */
25     private static int peache(int n) {
26         return n > 1 ? (peache(n-1)+1)*2:1;
27     }
28     /**
29      * at 2017年10月17日 下午6:51:56 by lzj
30      * @parameters1 String[] args
31      * @return void
32      */
33     public static void main(String[] args) {
34         Scanner scan;
35         do {
36             System.out.println("请输入猴子吃桃的总天数:");
37             scan=new Scanner(System.in);
38             if(scan.hasNextInt()) {
39                 System.out.println("猴子总共摘了:"+peache(scan.nextInt())+"个桃子!");
40             } else {
41                 System.out.println("输入错误!退出程序!"); 
42                 return;
43             }
44         }while(true);
45     }
46 }
单击"+"查看

运行结果截图附上:

如有任何疑问可联系邮箱: 给我发邮件、或直接联系QQ:1584875179 || 点返回首页

原文地址:https://www.cnblogs.com/aeon/p/7683687.html