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

解决方案 »

  1.   

    import java.util.ArrayList;public class Test {
    public static void main(String[] args) {
    int now = 0;
    int loop = 5;
    ArrayList<Integer> counts = new ArrayList<Integer>();
    for(int i=1;i<=100;i++){
      now = i;
      for(int j=loop;j>0;j--){
        if(now%loop==1){
         now=(i-1)*(loop-1)/loop;
           if(j==1){
             counts.add(i);
           }
        }else{
          continue;
        }
      }
    }
    System.out.println("个数:"+counts.size());
    for (Integer integer : counts) {
    System.out.println(integer);
    }
    }
    }执行结果
    个数:4
    21
    46
    71
    96
      

  2.   

    100以内的话,没有合适的值。
    最小值是3121。
    下面是代码和执行结果。import java.util.ArrayList;public class Test {
    public static void main(String[] args) {
    int now = 0;
    int loop = 5;
    ArrayList<Integer> counts = new ArrayList<Integer>();
    for (int i = 1; i <= 50000; i++) {
    now = i;
    for (int j = loop; j > 0; j--) {
    if (now % loop == 1) {
    now = (now - 1) * (loop - 1) / loop;
    if (j == 1) {
    counts.add(i);
    }
    }
    }
    }
    System.out.println("个数:" + counts.size());
    for (Integer integer : counts) {
    System.out.println(integer);
    }
    }
    }执行结果个数:16
    3121
    6246
    9371
    12496
    15621
    18746
    21871
    24996
    28121
    31246
    34371
    37496
    40621
    43746
    46871
    49996
      

  3.   

    我想问的是 第一只猴子分完之后剩下的桃子数为什么就一定是0或者5结尾的数呢? 首先总数-1是5的倍数 但是 总数-1的五分之四不代表其尾数一定是0或者5吧
    我也是菜鸟 给出一种实现方法 欢迎楼主和大家指教package com.test;public class HZFT {
    /**
     * @param args
     * 猴子分桃问题
     */
    public static void main(String[] args) {
    int j ,count;
    double i = 0;
    for (count = 1 ;count<1000;count++){//count的上限以有结果为目的 可以更大点
    i = count; //count的值可以理解为最后一只猴子拿走的桃的数量
    for ( j = 0;j<4;j++){ //这是5个猴子的情况 
      i = (i*5+1)/4;
    }    
    i = i*5+1; 
    if(isNum(i)){ //只有i是整数的时候才是符合要求的
    System.out.println(count);
    System.out.println("桃子的总数可能个数有:"+(int)i);
    }
    }
    }

    public static Boolean isNum(double i){ //判断是否是整数
    String str = i+"";
    str = str.replace(".","点");    //小数点的正则不会写 额 正则就不会 所以出此下策
    String[] st = str.split("点");
    if(st[1].equals("0")){
    return true ;
    }else{
    return false ;
    }
    }
    }
      

  4.   

    package com.jms.mq;public class Test{
    public static void main(String[] args) {
    Test t= new Test();
    int j;
    for(int i=0;i<1000;i++){
    //后面的猴子拿到的桃子必须乘以5,加1,后被4整除
    j =((i*5)+1)%4;
    //只有j=0的时候才为合法值
    if(j==0){
    Integer m=i;
    //递归4次获取第一只猴子获取的桃子个数
    for(int a=0;a<4;a++){
    m=t.getSum(m);
    if(m==null){
    break;
    }
    }
    if(m!=null){
    System.out.println("第5只猴子分到的个数"+i);
    System.out.println(m*5+1);
    System.out.println("-------------");
    }
    }
    }
    }

    /**
     * 获取前面猴子得到的桃子的个数
     * @return
     */
    public static Integer getSum(int i){
    //判断是否合法
    if(((i*5)+1)%4==0){
    return (i*5+1)/4;
    }else{
    return null;
    }
    }
    }
    第5只猴子分到的个数255
    3121
    -------------
    第5只猴子分到的个数511
    6246
    -------------
    第5只猴子分到的个数767
    9371
    -------------
    所以满足要求需要的最少的桃子是3121个
      

  5.   

    public class ceshi {
    public  static void main(String arg[]){
    int a;
    int i;
    for(int n=7;n<50000;n++){
    if((n-1)%5==0){
    a=(n-1)/5;
    for(i=0;i<4;i++){
    if((4*a-1)%5==0){
    a=(4*a-1)/5;
    }
    else{
    break;
    }

    }
    if(i==4){
    System.out.println(n);
    }
    }
    }
    }}
    我们算的是一样的!