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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 XiaoS 于 2014-1-1 13:56 编辑

题目:五只猴子采得一堆桃,它们约定次日早起来分。半夜里,一只猴子偷偷起来,把桃均分成五堆后,发现还多一个,它吃了这桃子,拿走了其中一堆。第二只猴子醒来,又把桃子均分成五堆后,还是多了一个,它也吃了这个桃子,拿走了其中一堆。第三只,第四只,第五只猴子都依次如此做了。问桃子总数最少有多少个?我的代码运行后没有反应?求高手解释!
class DD {
public static void main(String[] args) {
  //定义一个变量sum,来记录桃子的总数(假定桃子数量在10000以内);
  for (int sum = 0;sum <= 10000 ;sum++ ) {
   if ((sum - 1) % 5 == 0) {
    sum = (sum - 1) / 5*4;
    if ((sum - 1) % 5 == 0) {
     sum = (sum - 1) / 5*4;
     if ((sum - 1) % 5 == 0) {
      sum = (sum - 1) / 5*4;
      if ((sum - 1) % 5 == 0) {
       sum = (sum - 1) / 5*4;
       if ((sum - 1) % 5 == 0) {
        sum = (sum - 1) / 5*4;
        System.out.println("sum = "+sum);
       }
      }
     }
    }
   }
  }

}
}

评分

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

查看全部评分

10 个回复

倒序浏览
if ((sum - 1) % 5 == 0) {
//"%"【取余】改成“/”【除以】
回复 使用道具 举报
/*五只猴子采得一堆桃,它们约定次日早起来分。
半夜里,一只猴子偷偷起来,把桃均分成五堆后,发现还多一个
,它吃了这桃子,拿走了其中一堆。第二只猴子醒来,又把桃子均分成五堆后,
还是多了一个,它也吃了这个桃子,拿走了其中一堆。
第三只,第四只,第五只猴子都依次如此做了。问桃子总数最少有多少个?
*/
//求最少sum,也就是第五只猴子起来后分成五堆,还多一个。有6个桃子留给第五个猴子
public class houzi {
        public static void main(String[] args)
        {
                int sum=6;
                for(int i=1;i<5;i++)
                {
                        sum=5*sum+1;
                       
                }
                System.out.print("桃子至少有:"+sum);
        }
}

评分

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

查看全部评分

回复 使用道具 举报 0 1
董月峰 发表于 2013-12-30 17:11
/*五只猴子采得一堆桃,它们约定次日早起来分。
半夜里,一只猴子偷偷起来,把桃均分成五堆后,发现还多一 ...

按照你的程序,输出结果是3906,第一只猴子分完剩下(3906-1)/5*4=3124个桃子,这就就不能给第二只猴子分了。
回复 使用道具 举报
董月峰 发表于 2013-12-30 16:57
if ((sum - 1) % 5 == 0) {
//"%"【取余】改成“/”【除以】

我想用sum-1后的数判断能否被5整除,所以用了%
回复 使用道具 举报
本帖最后由 布鲁Go 于 2013-12-30 18:55 编辑

我去,花了我快两个小时,终于搞定了。。(中间都快崩溃了,编程真是个需要注意很小细节的脑力活,一旦思维陷进错误方向就痛苦)。。言归正传,你这个关键在于你没有搞临时变量,符合第一个判断后,循环就不是+1的递增了,而是直接从赋值后继续循环。  恩,还有这样写代码有点不够简洁,应该可以用递归简洁一点,脑袋有点晕就不优化了,你可以试试下面的代码。
  1. class DD {
  2. public static void main(String[] args) {
  3.   //定义一个变量sum,来记录桃子的总数(假定桃子数量在10000以内);
  4.   int temp;//要定义一个临时变量赋值。
  5.   for (int sum = 0;sum <= 10000 ;sum++ ) {
  6.           temp=sum;//这一步是关键,就是你sum改变后,不能自己赋值给循环里的sum.而要把sum赋值给临时变量才行,否则循环就不是从零开始了
  7.       if ((temp - 1) % 5 == 0) {
  8.            temp= (temp - 1) / 5*4;
  9.       if ((temp - 1) % 5 == 0) {
  10.           temp= (temp - 1) / 5*4;
  11.      if ((temp - 1) % 5 == 0) {
  12.          temp= (temp - 1) / 5*4;
  13.      if ((temp - 1) % 5 == 0) {
  14.          temp= (temp - 1) / 5*4;
  15.     if ((temp - 1) % 5 == 0) {
  16.          temp= (temp - 1) / 5*4;
  17.         System.out.println("sum = "+sum);//注意,你原来的方式,就算合理的0-1000循环,打印出来的也不是需要的sum,而是分到最后的桃子数。
  18.        }
  19.       }
  20.      }
  21.     }
  22.    }
  23.   }

  24. }
  25. }
复制代码

评分

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

查看全部评分

回复 使用道具 举报
daoyua 中级黑马 2013-12-30 20:37:51
7#
我知道你那个怎么回事了,你陷入死循环了,当SUM=0的时候第一个IF退出,但当SUN=1的时候, if ((sum - 1) % 5 == 0)这个成立但是sum = (sum - 1) / 5*4;这个SUM又变成0了,然后下SUM有++又变成1,如此无限循环了

评分

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

查看全部评分

回复 使用道具 举报
daoyua 中级黑马 2013-12-30 20:41:34
8#
找出你的错误了吧,求结束给分,你可以修改方法的,楼上那位修改了你的那个临时变量问题
回复 使用道具 举报
public class houzi2 {
        public static void main(String[] args)
        {
                for(int x=1;x<999;x++)
                {
                        double sum=5*x+1;
/*
第五个猴子拿走了x+1,剩下4x个,算作第四个猴子拿剩下的第五个猴子醒来看到的所有桃子数量sum就是5x+1
那么第四个猴子醒来看到多少呢?依次类推,第一个醒来看到的是多少呢?
*/
                        for(int i=4;i>=1;i--)
                        {
                                sum=sum/4*5+1;
                        }
                        if(sum==(int)(sum))
                        System.out.println(sum);
                }
        }
}
//个人疑惑,怎样找出最小的就立即结束循环,break;貌似结束的不对
回复 使用道具 举报
布鲁Go 发表于 2013-12-30 18:49
我去,花了我快两个小时,终于搞定了。。(中间都快崩溃了,编程真是个需要注意很小细节的脑力活,一旦思维 ...

谢谢啦,结果没问题!!:D
回复 使用道具 举报
daoyua 发表于 2013-12-30 20:41
找出你的错误了吧,求结束给分,你可以修改方法的,楼上那位修改了你的那个临时变量问题 ...

找到问题了,,谢谢!:lol
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马