编辑代码

const optimizeFruitBag = (fruits, capacity) => {
    // 按照重量价值降序排序
    fruits.sort((a, b) => b.value / b.weight - a.value / a.weight);

    const selectedFruits = [];
    let remainingCapacity = capacity;

    for (const fruit of fruits) {
        if (remainingCapacity >= fruit.weight) {
            // 如果背包容量足够,将整个水果装入
            selectedFruits.push({ ...fruit, description: "全部装入" });
            remainingCapacity -= fruit.weight;
        } else {
            // 否则,只装入一部分
            const description = "装入" + remainingCapacity + "/" + fruit.weight;
            fruit.value = Math.floor(remainingCapacity / fruit.weight * fruit.value) 
            fruit.weight = remainingCapacity
            selectedFruits.push({ ...fruit, description });
            break; // 背包已经装满,退出循环
        }
    }

    return selectedFruits;
}


const fruits = [
    { name: '苹果', weight: 15, value: 300 },
    { name: '香蕉', weight: 18, value: 180 },
    { name: '橘子', weight: 10, value: 150 },
    { name: '猕猴桃', weight: 9, value: 270 },
];

const capacity = 20;

const result = optimizeFruitBag(fruits, capacity);

console.log("策略为:");
for (const fruit of result) {
    console.log(`${fruit.name}${fruit.description}, 重量为${fruit.weight}kg, 价值:${fruit.value}元,)`);
}