编辑代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct {
    char name[20];
    double weight;
    double value;
} FruitItem;

int comparePrice(const void* left, const void* right) {
    FruitItem* leftFruitItem = (FruitItem*)left;
    FruitItem* rightFruitItem = (FruitItem*)right;
    double leftUnitPrice = leftFruitItem->value / leftFruitItem->weight;
    double rightUnitPrice = rightFruitItem->value / rightFruitItem->weight;
    if (leftUnitPrice > rightUnitPrice) {
        return -1;
    } else if (leftUnitPrice == rightUnitPrice) {
        return 0;
    } else {
        return 1;
    }
}

void selectFruits(double packCapacity, FruitItem Fruititems[], int n) {
    qsort(Fruititems, n, sizeof(FruitItem), comparePrice);
    double leftPackCapacity = packCapacity;
    for (int i = 0; i < n; i++) {
        if (leftPackCapacity > Fruititems[i].weight) {
            leftPackCapacity -= Fruititems[i].weight;
            printf("物品:%s %.2fkg\n", Fruititems[i].name, Fruititems[i].weight);
        } else {
            double unitPrice = Fruititems[i].value / Fruititems[i].weight;
            double packWeight = leftPackCapacity;
            double packValue = packWeight * unitPrice;
            printf("物品:%s %.2fkg\n", Fruititems[i].name, packWeight);
            leftPackCapacity = 0;
            break;
        }
    }
}

int main() {
    FruitItem Fruititems[] = {
        {"苹果", 15, 300},
        {"香蕉", 18, 180},
        {"橘子", 10, 150},
        {"猕猴桃", 9, 270}
    };
    int n = sizeof(Fruititems) / sizeof(Fruititems[0]);
    double packCapacity = 20;
    printf("背包里装的物品有:\n");
    selectFruits(packCapacity, Fruititems, n);
    double maxValue = 0;
    for (int i = 0; i < n; i++) {
        if (Fruititems[i].weight <= packCapacity) {
            maxValue += Fruititems[i].value;
            packCapacity -= Fruititems[i].weight;
        } else {
            double unitPrice = Fruititems[i].value / Fruititems[i].weight;
            double packWeight = packCapacity;
            double packValue = packWeight * unitPrice;
            maxValue += packValue;
            break;
        }
    }
    printf("物品总价值:%.2f元\n", maxValue);
    return 0;
}