五個水手來到一個島上,採了一堆椰子後,由於疲勞都睡着了。一段時間後,第一個水手醒來,悄悄地將椰子等分紅五份,多出一個椰子,便給了旁邊的猴子,而後本身藏起一份,再將剩下的椰子從新合在一塊兒,繼續睡覺。不久,第二名水手醒來,一樣將椰子了等分紅五份,剛好也多出一個,也給了猴子。然而本身也藏起一份,再將剩下的椰子從新合在一塊兒。之後每一個水手都如此分了一次並都藏起一份,也剛好都把多出的一個給了猴子。次日,五個水手醒來,發現椰子少了許多,心照不喧,便把剩下的椰子分紅五份,剛好又多出一個,給了猴子。請問水手最初最少摘了多少個椰子?算法
這裏須要注意的是,沒有初始條件,求最初最少摘了多少個椰子函數
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+"個");