有一列耕地,分为 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));