关于5只猴子分香蕉

       有5只猴子在海边发现一堆香蕉,决定第二天来平分,第二天清晨,第一只猴子最早来到,它左分右分分不开,就朝海里扔了一只,恰好可以分成5份,它拿上自己的一份走了。第2,3,4,5只猴子也遇到同样的问题,采用了同样的方法,都是扔掉一只后,恰好可以分成5份,问这堆香蕉至少有少只?

方式一

class Untitled {
    public static void main(String[] args) {
        int number;
        int count = 0;
        int i;
        for(i=6 ;;i=i+5){
            number = i;
            count = 0;
            while((number - 1) % 5 == 0){
                count++;
                number = (number -1) / 5 * 4;
                if(count == 5){
                    break;
                }
            }
            if(count == 5){
                break;
            }
        }
        System.out.println(i);
    }
}

方式二 

class Untitled {
    public static void main(String[] args) {
        System.out.println("沙滩上最少有" + count() + "个香蕉");
    }

    public static int count(){
        // n代表人数,k代表每次分配1份
        int n = 5, k = 1,min = 0;
        boolean flag = false;
// j代表最后一个猴子分配之后的香蕉数量
int j = 1; for(;;j++){ min = n*j+k; for(int i = 1;i < n;i++){ if(min % (n-1) == 0){ min = min * n / (n-1) +k; }else{ break; } if(i == n-1){ flag = true; break; } } if(flag == true){ break; } } System.out.println(j); return min; } }

反推验证

class Untitled {

    public static void main(String[] args) {
        System.out.println("---------" + (reverse(3121,5) == 1 ? "success":"fail") + "----------");
    }

    public static int reverse(int n,int m){
        //每次拿走后剩余num
        int num = n - 1 - (n - 1) / 5;
        m--;
        if(m > 0){
            //每次拿走的香蕉都能被5整除
            if((n - 1) % 5 == 0){
                return reverse(num,m);
            } else {
                return 0;
            }
        } else {
            return 1;
        }
    }
}

至少需要3121个香蕉,思路:采用倒推法.
设第二天每一只猴子分a个香蕉
第五只猴子未拿之前有:5a*(5/4)+1
第四只猴子未拿之前有:5a*(5/4)²+5/4+1
第三只猴子未拿之前有:5a*(5/4)³+(5/4)²+5/4+1
第二只猴子未拿之前有:5a*(5/4)^4+(5/4)³+(5/4)²+5/4+1
第一只猴子未拿之前有:5a*(5/4)^5+(5/4)^4+(5/4)³+(5/4)²+5/4+1 ··········①
①式后面5项为等比数列,求和有:5a*(5/4)^5+4*(5/4)^5-4=(5a+4)*(5/4)^5-4=min
接下来求最小值min,令5a+4=4^5,解得a=204,带入即得min=3121.

猜你喜欢

转载自www.cnblogs.com/rinack/p/11069113.html