五水手分椰子问题(递归问题)
五个水手来到一个岛上,采了一堆椰子后,因为疲劳都睡着了。第一个水手醒来,悄悄地将椰子等分成五份,多出一个椰子,便给了旁边的猴子,然后自己藏起一份,再将剩下的椰子重新合在一起,继续睡觉。第三第四个水手采取一样的策略,第五个水手醒来,便把剩下的椰子分成五份,恰好又多出一个,给了猴子。请问水手最初最少摘了多少个椰子。
#include<stdio.h>
#include<math.h>
int main() {
int i=1;
float x;
float k=1.0,y=1.0;
while(i<5) {
i++;
y=(4*y-1)/5;//y是每个水手私藏的椰子数,第一个y是第一个水手藏得椰子数目
if(y!=floor(y)) {//椰子数目应该是整数
k++;//k一步步增加椰子数目,不符合条件的被k赋予新值继续进行循环判断 ,直到有满足4次循环条件的y结束
y=k;
i=1;//y不符合条件循环应该从头开
}
}
x=k*5+1;//x为最初摘的椰子数目(此时的k为符合条件的第一个水手私藏的椰子数目)
printf("%6f",x);
return 0;
}