农场主牛牛(数组往返计数)

有一列耕地,分为 n 块,m 肥料,往返于这 n 块地,一次放 1 肥料,肥料放完为止,返回每块地中的肥料数

function FarmerNN(n, m) {
    // 有一列耕地,分为 n 块,m 肥料,往返于这 n 块地,一次放 1 肥料,肥料放完为止,返回每块地中的肥料数
    const res = Array(n).fill(0);
    if (m <= n) {
        for (let i = 0; i < m; i++) res[i] = 1;
        return res;
    }
    res.fill(1);
    m -= n;
    const columns = Math.floor(m / (n - 1));
    const extra = m % (n - 1);
    const lastDirection = columns % 2 === 0;  // false 表示向下,true 表示向上
    const downNum = Math.floor(columns / 2);
    const upNum = columns - downNum;
    res[0] += upNum;
    res[n - 1] += downNum;
    for (let i = 1; i < n - 1; i++) res[i] += columns;
    if (lastDirection) {
        for (let i = n - 2; i > n - 2 - extra; i--) res[i] += 1;
    } else {
        for (let i = 1; i < 1 + extra; i++) res[i] += 1;
    }
    return res;
}

console.log(FarmerNN(6, 213536543643));

版权

本作品采用 CC BY-NC-ND 4.0 授权。