五猴子分桃问题,逆推!

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

程序分析
五只猴子分了五次桃子,假设第一只猴子那份桃子的个数为x,桃子的总数:x*5+1,第一只猴子拿走一份,丢掉一个后还剩下4份。假设第二只猴子那份桃子的个数为y,第二次分桃子的总数:4*x=y*5+1 在此基础上再分5份,拿走一份,丢掉一个还剩四份。第三只猴子那份桃子也是在第二只猴子剩下的四分里面再分,到第四只,第五只猴子也是。如果知道了第一只猴子拿走那份桃子的个数x便可以知道所有桃子的总数。x可以由第二只猴子那份桃子y*5+1/4=x,y可以从第三只猴子那里求出,第四次猴子求出第三只猴子桃子的个数,第五只猴子求出第四只猴子拿走桃子的个数。可以假设第一只猴子那份桃子为1开始计算,不满足继续增加,一直到满足为止。

int lastPart = 1; //最后那只猴子拿到的那份桃子数,
int onePart = 0; //通过最后那份桃子推理出第一份的桃子数,
int count = 1; //循环的次数,设置为条件。一共要循环4次
while(count<5)
{
    onePart = lastPart; 
    for(int i = 0;i<4;i++)
    {
        int allPeach = onePart*5+1; //假设第i次桃子的总数 ,从第五次开始
        if(allPeach%4!=0) //如果不能整除4就不能推理出上次桃子的分数,叠加桃子数重新开始循环
        {
             lastPart++;
            count = 1; //循环计数器次数重置为1
            break;
        }
        onePart=allPeach/4; //可以求出上次桃子的个数
        count++; //叠加计数器

}
Console.WriteLine("最少有"+(onePart*5+1)+"个桃子");

运行结果
这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_38061677/article/details/80809897
今日推荐