黑马程序员技术交流社区

标题: 求帮助优化该程序 [打印本页]

作者: 李文富    时间: 2012-5-22 17:15
标题: 求帮助优化该程序
/*海滩上有一堆桃子和五只猴子
第一只猴子先来到海滩上, 发现了桃子, 将桃子分成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]);
}
}
还有更优的解题方法;
作者: 8161776    时间: 2012-5-22 17:46
本帖最后由 杨尧 于 2012-5-22 20:12 编辑

{:soso_e117:}
作者: 罗文杰    时间: 2012-5-22 18:50
本帖最后由 罗文杰 于 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。







作者: 云惟桉    时间: 2012-5-22 18:55
这里用递归的方式按照楼主的题目写了一下,不保证最优,但提高一下代码可读性而已。
以下代码打印了每只猴子发现桃子时的桃子总数:
  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.         }
复制代码
希望交流交流~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2