java例题_41 利用递归给猴子分桃

 1 /*41 【程序 41 猴子分桃】 
 2 题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为五份,多了一个,这只猴子把
 3 多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的
 4 一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?
 5 */
 6 
 7 /*分析
 8  * 设共有s个桃子,s满足:
 9  * 第一次分:s1=(s-1)%5==0
10  * 第二次   : s2=(s1-1)%5==0
11  * .....
12  * 第五次       s5=(s4-1)%5==0
13  * 判断算法——5次递归:if(!s){s=(s-1)%5;}
14  *从1开始遍历,直到满足条件,得到s
15  * */
16 
17 
18 package homework;
19 
20 public class _41____________ {
21 
22     public static void main(String[] args) {
23         //声明一个标记,判断s是否满足条件
24         boolean mark=false;
25         //声明s,从1开始遍历,满足条件后结束遍历
26         int s=0;
27         while (!mark) {    //如果不满足,则s++,满足了就不加了
28             s++;
29             mark=isSatisfy(s);   //将判断的结果返回给mark
30             
31         }
32         if (mark) {
33             System.out.println("共有"+s+"个桃子");
34         }
35 
36     }
37     
38     private static boolean isSatisfy(int n) {
39         //用for循环判断5次
40         for (int j = 1; j <=5; j++) {
41             if (n%5!=1) {         //表示不能刚好分完
42                 return false;
43             }else {
44                 n=(n-1)/5*4;          //下一次分时还剩下的桃子数量
45             }
46             if (j==5) {
47                 return true;    //5次判断完了且刚刚满足分配条件,返回true
48             }
49         }
50         return false;
51         
52     }
53 
54 }

 

posted @ 2020-02-19 14:05  浪漫主义程序员  阅读(564)  评论(0编辑  收藏  举报