javascript解决猴子分桃问题

先来一个简单一点的题目:

 猴子吃桃问题:

猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少?(提示:采用逆向思维的方向 ,从后向前推算)

解析:第十天只有一个桃子,那么第九天就应该有(1+1)*2=4个,通过倒退我们可以推算出公式应该是 前一天的桃子数=(后一天桃子数+1)*2。

代码如下:

var peaches = 1;
    for (var days = 1; days <= 9; days++) {
        peaches = (peaches + 1) * 2;
    }
    console.log(peaches);

下面的这道题目跟上面的很相似。

题目:

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

其实这个题目的关键就在于找到桃子的公式,然后循环五次。

首先我们用倒推法,先假设最后一个猴子拿到了i个桃子,那么最后一个猴子在没有分桃之前应该有a=(5*i+1)个桃子。

再往前推,第四个猴子在没有分桃之前有b=a/(4/5)+1。第一个第二个第三个猴子也是同理。

代码如下:

    var peaches = 0; //最初的桃子数
    for (var i = 1;; i++) {
        var peaches = 5 * i + 1;
        for (monkeys = 1; monkeys < 5; monkeys++) {
            peaches = peaches / 4 * 5 + 1;
            //用第五个猴子拿之前的桃子数反推第四个猴子拿桃子前的数量
            //反推四次 拿走一份后 剩下4/5份桃子 反推就是 除以 4/5 即*5/4

        }
        if (peaches % 5 == 1) {
            console.log(peaches);
            break;//结束循环

        }
    }
    console.log(peaches);

猜你喜欢

转载自blog.csdn.net/weixin_42567822/article/details/124932991