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

分析:设海滩上原来有x个桃子,则

第一只猴子分完桃子之后剩下的桃子x1=x-1-(x-1)/5=(4*(x-1))/5

第二只猴子分完桃子之后剩下的桃子x2=x1-1-(x1-1)/5=(4*(x1-1))/5

第三只猴子分完桃子之后剩下的桃子x3=x2-1-(x2-1)/5=(4*(x2-1))/5

第四只猴子分完桃子之后剩下的桃子x4=x3-1-(x3-1)/5=(4*(x3-1))/5

第五只猴子分完桃子之后剩下的桃子x5=x4-1-(x4-1)/5=(4*(x4-1))/5

假设第五只猴子分得的桃子为1,五份则为5,即第5只猴子分完桃子后剩下的桃子为4

4/4*4+1=6  即6为第五只猴子开始分之前的桃子数,但是6%4!=0,即不满足当第四只猴子分完桃子后剩余桃子个数。

所以第五只猴子分得的桃子数不是1,那么从2开始推,直到满足每次所有条件为止。

从图中可以看出 假定第五只猴子分得的桃子个数为255时,满足所有条件。

即当第五只猴子分得桃子个数为255时

剩余桃子数1020,那么四只猴子分完桃子后剩余1276=1020/4*5+1   //此处除以4是因为剩余桃子数刚好为第五只猴子的4份

当第三只猴子分完桃子后剩余1596=1276/4*5+1 

第二只猴子分完桃子后剩余1996=1596/4*5+1

第一只猴子分完桃子后剩余2496=1996/4*5+1

那么没有分桃子时桃子为3121=2496/4*5+1

  符合所有条件

那么没有分桃子时,桃子个数最少为3121

代码如下:

#include <stdio.h>

int main()
{
    int i;//循环次数
    int j=1;//第五只猴子分的桃子
    int x;//桃子数
    while(1)
    {
        x=4*j;
        printf("第五只猴子分得桃子为%d个时,剩余桃子数为%d\n",j,x);
        for(i=0;i<5;)
        {
            if(x%4!=0)break;//必须连续五次x都能被4整除才符合条件.
            else
            {
              x=(x/4)*5+1;
              printf("第五只猴子分得桃子为%d个时,剩余桃子数为%d\n",j,x);
              i++;
            }
        }
        printf("\n");

        j++;
        if(i==5)
            break;
    }

    printf("%d",x);
    return 0;
}

 

 

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐