编辑代码

// 计算数组的累加和
function arrayCumulativeSum(arr) {
    const cumulativeSum = [];
    let sum = 0;
    for (const num of arr) {
        sum += num;
        cumulativeSum.push(sum);
    }
    return cumulativeSum;
}

// 农民分土地问题的递推实现
function divideLand(land, farmers) {
    const totalArea = land.reduce((sum, area) => sum + area, 0);
    const averageArea = Math.floor(totalArea / farmers);
    
    const cumulativeLand = arrayCumulativeSum(land);
    const result = new Array(farmers).fill(0);
    let currentFarmer = 0;
    
    for (let i = 0; i < land.length; i++) {
        if (cumulativeLand[i] <= (currentFarmer + 1) * averageArea) {
            result[currentFarmer] = cumulativeLand[i];
        } else {
            currentFarmer++;
            result[currentFarmer] = cumulativeLand[i];
        }
    }

    // 计算每个农民分配的土地面积
    for (let i = 0; i < farmers; i++) {
        result[i] = i > 0 ? result[i] - result[i - 1] : result[i];
    }

    return result;
}

// 测试
const land = [20, 30, 10, 40];
const farmers = 3;
const result = divideLand(land, farmers);
console.log(result); // 输出每个农民分配的土地面积


const land1 = [20, 30, 10, 40];
const farmers1 = 3;
const result1 = divideLand(land1, farmers1);
console.log(result1); // 输出每个农民分配的土地面积

const land2 = [10, 15, 20, 25, 30];
const farmers2 = 4;
const result2 = divideLand(land2, farmers2);
console.log(result2); // 输出每个农民分配的土地面积