五个水手来到一个岛上,采了一堆椰子后,由于疲劳都睡着了。一段时间后,第一个水手醒来,悄悄地将椰子等分红五份,多出一个椰子,便给了旁边的猴子,而后本身藏起一份,再将剩下的椰子从新合在一块儿,继续睡觉。不久,第二名水手醒来,一样将椰子了等分红五份,刚好也多出一个,也给了猴子。然而本身也藏起一份,再将剩下的椰子从新合在一块儿。之后每一个水手都如此分了一次并都藏起一份,也刚好都把多出的一个给了猴子。次日,五个水手醒来,发现椰子少了许多,心照不喧,便把剩下的椰子分红五份,刚好又多出一个,给了猴子。请问水手最初最少摘了多少个椰子?算法
这里须要注意的是,没有初始条件,求最初最少摘了多少个椰子函数
y[i] 表明第i个水手偷藏的椰子3d
由题目能够获得 个迭代方程 n/5 = (n-n/5-1)/5
code
这里等式左边是第1个水手所藏的椰子数,右边则是下一个水手所藏的椰子数blog
化简可得递推公式y[i+1]=(4y[i]-1)/5
从前日后推im
当每次递推的所藏椰子数为正整数,则知足条件,这里经过使用floor
函数能够断定一个数是否为整数db
int i =1; double k,y,x; k=1.0; y=k; while(i<=5){ i++; y = (4*y-1)/5; if(y!=Math.floor(y)){ k++; y=k; i=1; } } x=5*k+1; System.out.println("椰子至少有"+x+"个");