编辑代码

//JSRUN引擎2.0,支持多达30种语言在线运行,全仿真在线交互输入输出。 
function fractionalKnapsack(fruits, capacity) {
    // 计算每种水果的单位重量价值并进行排序
    fruits.sort((a, b) => (b.value / b.weight) - (a.value / a.weight));

    let totalValue = 0;
    let strategy = [];

    for (const fruit of fruits) {
        if (capacity > 0 && fruit.weight <= capacity) {
            // 如果背包可以装下整个水果,则全部装入
            capacity -= fruit.weight;
            totalValue += fruit.value;
            strategy.push({ name: fruit.name, weight: fruit.weight });
        } else {
            // 如果背包装不下整个水果,则装入部分
            totalValue += fruit.value * (capacity / fruit.weight);
            strategy.push({ name: fruit.name, weight: capacity });
            break;
        }
    }

    return { totalValue, strategy };
}

// 测试数据
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 = fractionalKnapsack(fruits, capacity);
console.log("Total value:", result.totalValue);
console.log("Strategy:", result.strategy);