算法1 五只猴子挑桃子

2017-08-27  本文已影响0人  holmes000

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

思路:第一只猴子分出的一份桃中有x个, 起始5x+1,剩余4x

第二只猴子分出的一份桃有y个 (4x-1)/5=y ,起始4x=5y+1,剩余4y

。。。然而读到最后可知最后一个猴子一份桃中若有n个,起始5n+1,剩余4n个

前一个猴子的剩余个数是后一个猴子的起始个数

n的条件是1),正整数(n>=1) 2),(5n+1)/4为正整数

最后一个猴子起始最少(5n+1)个

第四个猴子起始5*((5n+1)/4)+1

第三个猴子起始5(5((5n+1)/4)+1)+1

第二个猴子起始5(5(5*((5n+1)/4)+1)+1)+1

第一个猴子。。。以此类推

依题可知

从最后一个猴子入手,它的起始桃子个数就是上一个猴子剩余桃子个数,此个数能整除4.我们假设最后一个猴子分桃子一份个数为n个,那么他的桃子起始数量就为5n+1,即它上一个猴子的桃子剩余数量。从而找到第一个猴子的起始数量即为海滩桃子的数量。
代码

    int num = 5;//num代表猴子数量
    int n = 3;//n代表最后一只猴子分出一份中的个数
    int startNum = 0;//每个猴子的起始数量
    for (int i = 0; i < num; i++) {//i=0时为第num个猴子
        if (i == 0) {
           startNum = 5 * n + 1;
        } else {
            if (startNum % 4 != 0){
                n++;
                i = -1;//回到第num只猴子
            }else {
                startNum = 5 * (startNum / 4) + 1;
            }
        }
    }
    System.out.println("海滩上原来最少有多少个桃子(即第一个猴子的起始数量)="+startNum+" 相应第"+num+"个猴子的每份桃子的数量为="+ n);
上一篇 下一篇

猜你喜欢

热点阅读