算法学习——递推之水手分椰子

算法描述

五个水手来到一个岛上,采了一堆椰子后,由于疲劳都睡着了。一段时间后,第一个水手醒来,悄悄地将椰子等分红五份,多出一个椰子,便给了旁边的猴子,而后本身藏起一份,再将剩下的椰子从新合在一块儿,继续睡觉。不久,第二名水手醒来,一样将椰子了等分红五份,刚好也多出一个,也给了猴子。然而本身也藏起一份,再将剩下的椰子从新合在一块儿。之后每一个水手都如此分了一次并都藏起一份,也刚好都把多出的一个给了猴子。次日,五个水手醒来,发现椰子少了许多,心照不喧,便把剩下的椰子分红五份,刚好又多出一个,给了猴子。请问水手最初最少摘了多少个椰子?算法

算法思路

  1. 这里须要注意的是,没有初始条件,求最初最少摘了多少个椰子函数

  2. y[i] 表明第i个水手偷藏的椰子3d

    由题目能够获得 个迭代方程 n/5 = (n-n/5-1)/5code

    这里等式左边是第1个水手所藏的椰子数,右边则是下一个水手所藏的椰子数blog

    化简可得递推公式y[i+1]=(4y[i]-1)/5 从前日后推im

  3. 当每次递推的所藏椰子数为正整数,则知足条件,这里经过使用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+"个");

结果

相关文章
相关标签/搜索