美文网首页
算法1 五只猴子挑桃子

算法1 五只猴子挑桃子

作者: holmes000 | 来源:发表于2017-08-27 21:40 被阅读0次

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

    思路:第一只猴子分出的一份桃中有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);

    相关文章

      网友评论

          本文标题:算法1 五只猴子挑桃子

          本文链接:https://www.haomeiwen.com/subject/uhvidxtx.html