A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李文富 中级黑马   /  2012-5-22 17:15  /  1864 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*海滩上有一堆桃子和五只猴子
第一只猴子先来到海滩上, 发现了桃子, 将桃子分成5份, 发现多了一个, 把多的一个扔到了海里, 拿走了一份
第二只猴子也来到海滩上, 发现桃子之后也是分成5份, 又多了一个, 还是扔到海里, 拿走了一份
后面三只猴子都是这么做的, 问海滩上最初最少有多少个桃子?*/
public class MokeyTest {
public static void main(String[] args){
    int initPeak=6 , mokey=5;
    int[] arr = new int[5];
    arr[0]=initPeak;
    for(int i = 1;i<mokey;i++){
       initPeak=initPeak*mokey+1;
      arr[i]=initPeak;
    }
       for(int i =arr.length-1;i>=0;i--)
       System.out.println(arr[i]);
}
}
还有更优的解题方法;

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

3 个回复

正序浏览
这里用递归的方式按照楼主的题目写了一下,不保证最优,但提高一下代码可读性而已。
以下代码打印了每只猴子发现桃子时的桃子总数:
  1.         public static void main(String[] args) {       
  2.                 List<Integer> list = new ArrayList<Integer>();
  3.                 System.out.println(calPeak(4, 0,list)+" : "+list);
  4.         }
  5.         public static int calPeak(int monkey,int peakNum,List<Integer> list){       
  6.                 if(monkey ==0){
  7.                         peakNum =(monkey+1)*5+1;
  8.                         list.add(monkey,peakNum);
  9.                         return peakNum;
  10.                 }else {                       
  11.                         peakNum += 5*calPeak(--monkey, peakNum,list)+1;
  12.                         list.add(monkey+1,peakNum);
  13.                         return peakNum;
  14.                 }
  15.         }
复制代码
如果只是按照题目要求只给出最初桃子的总数,就更简单了:
  1.         public static int calPeak(int monkey,int peakNum){       
  2.                 if(monkey ==0){               
  3.                         return peakNum =(monkey+1)*5+1;
  4.                 }else {                                       
  5.                         return peakNum += 5*calPeak(--monkey, peakNum)+1;
  6.                 }
  7.         }
复制代码
希望交流交流~

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
本帖最后由 罗文杰 于 2012-5-22 20:11 编辑

{:soso_e126:}二楼好快- -!
= =!本来我也像楼主还有楼下的哥们那么想的,后来想不对劲啊啊……结果算了下,跟二楼的哥们探讨了下果然思路有点问题。
下面是我的程序
class  Test1
{
        public static void main(String[] args)
        {               
                for (int i = 10000; i >= 6 ; i--)   // i 为桃子的总数 最少为6
                {
                        
                        int sum = i;                       //设置临时变量记录桃子被拿之后剩下多少
                        int count = 0;                        //设置成功拿到桃子的计数器
                        for (int x = 1; x <= 5 ;x++)                          
                        {                                       
                                if(sum%5 == 1)
                                {
                                        sum = sum - (sum/5 + 1);   //剩下桃子的数量
                                        count++;                                                        
                                }        
                                if(count == 5)         //成功拿到5次后输出
                                {
                                        System.out.println(i);
                                }               
                        }                        
                }                        
        }
}   
运行接果是:最小为3121。






评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
本帖最后由 杨尧 于 2012-5-22 20:12 编辑

{:soso_e117:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马