问题描述:
海滩上有一堆桃子,五只猴子来分。第1只猴子把这堆桃子平均分为五份,多了一个,这只猴子把多的一个吃掉,拿走了一份。
第二只猴子把剩下的桃子又平均分为五份,又多了一个,它同样把多的一个吃掉,拿走了一份,第3、第4、第5只猴子都是这样做的。
问海滩上原来最少有多少个桃子。
算法分析:
假设海滩上原来有x个桃子,则第一只猴子分完拿走之后剩余((x-1)/5)*4桃子,第二只桃子分完拿走之后剩余
(((x-1)/5)*4-1)/5)*4桃子,以此类推,可见最后剩余的桃子一定能被4整除。现在假设第5只猴子拿走了桃子之后还剩余y个,则根据公式((x-1)/5)*4 = y,可得到x = (y*5)/4+1。
#include<stdio.h>
int main()
{
int i,m,j,k,count;
for(i=4;i<10000;i+=4)
{
count = 0;
m = i;
for(k=0;k<5;k++)
{
j=m/4*5+1;
m = j;
if(j%4 == 0)
count++;
else
break;
}
if(count == 4)
{
printf("%d\n",j);
break;
}
}
return 0;
}