题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为五份,多了一个,这只 猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了 一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的, 问海滩上原来最少有多少个桃子?
知乎上看到有一个人心算这个问题,虽然看不太懂,但我大为震撼。
设最后一个猴子(5th)拿完桃后桃子的个数为x,x的值每一轮都得能被4整除
拿后 拿前
5th: x x=(x/4)*5+1
4th: x x=(x/4)*5+1
3th: x x=(x/4)*5+1
2th: x x=(x/4)*5+1
1th: x x=(x/4)*5+1
代码一
#include <stdio.h>
int fun(int x)
{
for(int i=0;i<5;i++){
if(x%4)
return 0;
x=(x/4)*5+1;
}
return x;
}
int main()
{
int ret=0;
for(int i=1;;i++){
ret=fun(4*i);
if(ret){
printf("%d",ret);
break;
}
}
return 0;
}
代码二
#include <stdio.h>
int main()
{
int x;
int i = 0;
int j = 1;
while (i<5) {
x=4*j;
for(i=0;i<5 && !(x%4);i++){
x=(x/4)*5+1;
}
j++;
}
printf("%d\n",x);
return 0;
}