五只猴子摘了一堆桃子,可是怎么也平分不了。于是一致同意先去睡觉,明天再分。夜里,一只猴子偷偷起来,先吃掉一个桃子,剩下的桃子正好平分成5份。它蒇起自己的1份,然后再去睡觉。过了一会,第二只猴子起来,也吃掉1个桃子,剩下的桃子也正好平分成5份。它也藏起了自己的1份,然后再去睡觉。第三只、第四只和第五只也都依次这样做。问最初那堆桃子至少有多少个?

解决方案 »

  1.   

    网上流传的解法第五只猴子吃掉一个桃子后剩5a个
    第四只猴子吃掉一个桃子后剩5(5a+1)/4=25a/4+5/4
    第三只猴子吃掉一个桃子后剩5(25a/4+5/4+1)/4=125a/16+45/16
    第二只猴子吃掉一个桃子后剩5(125a/16+45/16+1)/4=625a/64+305/64
    第一只猴子吃掉一个桃子后剩5(625a/64+305/64+1)/4=3125a/256+1845/256
    原来共有桃子3125a/256+1845/256+1=3125a/256+2101/256=(12a+8)+53(a+1)/256
    桃子数是整数 所以a=255 桃子总数3121个第一只猴子吃掉一个剩3120 拿走624 剩2496
    第二只猴子吃掉一个剩2495 拿走499 剩1996
    第三只猴子吃掉一个剩1995 拿走399 剩1596
    第四只猴子吃掉一个剩1595 拿走319 剩1276
    第五只猴子吃掉一个剩1275 拿走255 剩1020当a取255+256n(n为自然数)时 对应无数组解 上面的是最小正整数解
    最后剩1020,第二天猴子们明显就会发现桃子被偷了,因为最后能平分了
      

  2.   

    贴出我的代码,欢迎拍砖 public static void main(String[] args) throws Exception {
    for (int i = 0;; i++) {
    int x = 5 * (i + 1) + 1;
    int y = x;
    for (int j = 0; j < 5; j++) {
    y = y * 5 / 4 + 1;
    if ((y - 1) % 5 != 0) {
    break;
    }
    }
    if ((y - 1) % 5 == 0) {
    System.out.println("最少有桃子" + y + "个 ,最后剩下" + x + "个");
    return;
    }
    }
    }最少有桃子15621个 ,最后剩下5116个
      

  3.   

    可用递归查找出偷吃任意次的解public class Monkeys {
    public static boolean eatAndHide(int x, int times) {
    if (times==0) return true;
    if ((x-1)%5!=0 || x<=0) return false;
    return eatAndHide((x-1)/5*4, times-1);
    } public static void main(String[] args) {
    int x = 1;
    while(!eatAndHide(x,5))
    x++;
    System.out.println("最少有桃子" + x + "个 ");
    }
    }
    运行结果:最少有桃子3121个 
      

  4.   


    你这段代码唯一不对的地方在这里
    for (int j = 0; j < 5; j++)改成for (int j = 0; j < 4; j++)
    原因是
    int x = 5 * (i + 1) + 1;
    这已经相当于最后一只猴子偷吃过了,所以for只要循环4次就够了
      

  5.   

    其实就是最后桃子能不能平分的问题,
    小学奥数上有一题是猪八戒吃饺子,题目明确说了最后能平分,用alexandertech的解法没错,但猴子这个还真没看哪个版本说最后桃子能不能平分的。
      

  6.   


    public class Monkeys {
    public static boolean eatAndHide(int x, int times) {
    if (times==0) return true;
    if ((x-1)%5!=0 || x<=0) return false;
    return eatAndHide((x-1)/5*4, times-1);
    } public static void main(String[] args) {
    int x = 1;
    while(!eatAndHide(x,6)||x%5==0) //添加x%5==0强制第二天也不能被平分
    x++;
    System.out.println("最少有桃子" + x + "个 ");
    }
    }
      

  7.   

    http://www.zhshxx.com/zsxx/Controls/NewsShow.aspx?ID=168这是一个小学的网站上的这不耽误小朋友么???
      

  8.   

    22楼改错地方了,修正一下public class Monkeys {
    public static boolean eatAndHide(int x, int times) {
    if (times==0) return x%5!=0; //添加x%5!=0强制第二天也不能被平分
    if ((x-1)%5!=0 || x<=0) return false;
    return eatAndHide((x-1)/5*4, times-1);
    } public static void main(String[] args) {
    int x = 1;
    while(!eatAndHide(x,6)) 
    x++;
    System.out.println("最少有桃子" + x + "个 ");
    }
    }
      

  9.   

    我咋不厚道了列。小盆友,叔叔今天不舒服,没心思coding 和回贴。
      

  10.   

    美女还是要看看的,花无百日红,抓紧show一下啊
      

  11.   

    佛曰:no picture no truth!
      

  12.   

    应该是"他"吧,alexander, 艾瑞克都是男名
      

  13.   

    别害羞啦。。赶紧的show一下吧。这是自己的资本弱弱的说:这个月我应该可以升三星
      

  14.   

    6点。。今天一天不舒服的很。就定义一个Pojo  CSDN也没回啥贴,就在那里不停的咳啊。难受死了,赶紧的下班