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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 闫镜湾 中级黑马   /  2014-5-24 00:41  /  5660 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1 淡定

查看全部评分

9 个回复

倒序浏览
。。。用递归 话说怎么感觉你在刷屏
回复 使用道具 举报
class Monkey {
/*海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,
        拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,
        第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?*/
                                                                                                       
        public static void main(String[] args) {
                int x = taoZi(5);
                System.out.println(x);
       
        }
        public static int taoZi(int num) {
               
                if(num == 0)
                        return 1;//第5只猴子分完后,手里剩下1只桃子,(满足最少要求)
                else
                        return taoZi(num-1) * 5+ 1;
        }
}
回复 使用道具 举报
最后剩余桃子:1020个
海滩上原来最少有桃子:3121个

  1. public class MonkeyPeach {
  2.         public static void main(String[] args) {
  3.                 int num = 0;
  4.                 int peach=0;
  5.                 boolean flag = true;

  6.                 while (flag) {
  7.                         num+=4;
  8.                         peach = num;
  9.                         int i = 1;
  10.                         for (i = 1; i <= 5; i++) {
  11.                                 if (peach % 4 == 0) {
  12.                                         flag = false;
  13.                                         peach = peach + peach / 4 + 1;
  14.                                 } else {
  15.                                         flag = true;
  16.                                         break;
  17.                                 }
  18.                         }                       
  19.                 }               
  20.                 System.out.println("last:"+num);
  21.                 System.out.println("total peach:"+peach);
  22.         }
  23. }
复制代码


请老师点评
回复 使用道具 举报
本帖最后由 cat73 于 2014-7-5 18:45 编辑

这道题我的思路是这样的:
1.先理清数据之间的关系
假设最后一个猴子拿走了n个桃子,那么拿n*4就是最后剩下的桃子,n*5+1就是最后一只猴子拿之前剩下的桃子
最后一个猴子拿之前剩下的桃子/4*5+1就是第二个猴子拿之前剩下的桃子,依次类推上去
然后由于桃子的数量只可能是整数,所以只要判断这里面出现的所有数据是否都是整数即可

表格中的分析,绿色标记的是i的值:



  1.         public static void main(String[] args) {
  2.                
  3.                 int i = 0;
  4.                 while(!checkNum(++i));
  5.                 System.out.println("最后一个猴子拿走了" + i + "个桃子");
  6.                 System.out.println("最初的桃子数为:" + (((((i * 5 + 1) / 4 * 5 + 1) / 4 * 5 + 1) / 4 * 5 + 1) / 4 * 5 + 1));
  7.         }
  8.         
  9.         /**
  10.          * 检查传入的num是否符合条件
  11.          * @param num 最后一个猴子拿走的桃子数
  12.          * @return
  13.          */
  14.         public static boolean checkNum(int num){
  15.                 double t = num;
  16.                 t *= 5;
  17.                 t++;//最后一个猴子拿之前的桃子数
  18.                
  19.                 for(int i = 0; i < 4; i++){
  20.                         t = t / 4 * 5 + 1;//计算出上次分桃之前剩余的桃子数量
  21.                         
  22.                         //检查本次要分的桃子数, 本次剩下的桃子数, 本次拿走的桃子数是否都是整数
  23.                         if(!(isInt(t) && isInt((t - 1) / 5 * 4) && isInt((t - 1) / 5)))
  24.                                 return false;
  25.                 }
  26.                 return true;
  27.         }
  28.         
  29.         /**
  30.          * 检查一个数是否为整数
  31.          * @param num 数字
  32.          * @return 是否为整数
  33.          */
  34.         public static boolean isInt(double num){
  35.                 return (((int) num) == num);
  36.         }
复制代码

输出为:
最后一个猴子拿走了255个桃子
最初的桃子数为:3121





回复 使用道具 举报 1 0
/* 多的不说 直接上代码 */  public class MonkeyPeach{ public static void main(String[] args){                 int n=1;                 int m=0;                 int flag=1;                 int monkeyNum=5;                  //这里我们利用while循环(死循环)                 while(true)                         {                         llag=1;                         m=monkeyNum*n+1;                         for(int i=monkeyNum;i>=1;i--){                         if(m%(monkeyNum-1)==0){                                 flag++;//计算多少次的桃子数可以被4整除                                         }                                                          else                                 break;                         }                 if(flag==monkeyNum)//每次的桃子都可以被4整除                         break;                 n++;         }                 System.out.println("开始的桃子至少是:"+m);                 System.out.println("此时第5个猴子得到桃子数是:"+n);         }   }
回复 使用道具 举报
/*
多的不说 直接上代码
*/

public class MonkeyPeach{
public static void main(String[] args){
                int n=1;
                int m=0;
                int flag=1;
                int monkeyNum=5;

                //这里我们利用while循环(死循环)
                while(true)
                        {
                        llag=1;
                        m=monkeyNum*n+1;
                        for(int i=monkeyNum;i>=1;i--){
                        if(m%(monkeyNum-1)==0){
                                flag++;//计算多少次的桃子数可以被4整除
                                        }
                               
                        else
                                break;
                        }
                if(flag==monkeyNum)//每次的桃子都可以被4整除
                        break;
                n++;
        }
                System.out.println("开始的桃子至少是:"+m);
                System.out.println("此时第5个猴子得到桃子数是:"+n);
        }


}
//刚才快速回复码乱了 再来一次  看到那么久都没解决 我回答下
回复 使用道具 举报
表数学渣,笔试不会这么坑吧
回复 使用道具 举报
感觉楼主水平一般啊
回复 使用道具 举报
我以为只是简单的数学题!看来我还要继续学习黑客知识~新人求指教!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马