#include <stdio.h>
#include <stdlib.h>
typedef struct {
char name[20];
double totalWeight;
double totalValue;
} Item;
int compare(const void *a, const void *b) {
Item *itemA = (Item *)a;
Item *itemB = (Item *)b;
double unitPriceA = itemA->totalValue / itemA->totalWeight;
double unitPriceB = itemB->totalValue / itemB->totalWeight;
if (unitPriceA > unitPriceB) {
return -1;
} else if (unitPriceA < unitPriceB) {
return 1;
}
return 0;
}
void packBean(int packCapacity, Item *items, int numItems) {
qsort(items, numItems, sizeof(Item), compare);
double leftPackCapacity = packCapacity;
double maxValue = 0;
printf("装了如下物品:\n");
for (int i = 0; i < numItems; ++i) {
if (leftPackCapacity > items[i].totalWeight) {
leftPackCapacity -= items[i].totalWeight;
maxValue += items[i].totalValue;
printf("%s %.2f\n", items[i].name, items[i].totalWeight);
} else {
double unitPrice = items[i].totalValue / items[i].totalWeight;
double packWeight = leftPackCapacity;
double packValue = packWeight * unitPrice;
maxValue += packValue;
printf("%s %.2f\n", items[i].name, packWeight);
break;
}
}
printf("总价值:%.2f\n", maxValue);
}
int main() {
Item items[] = {
{"苹果", 15, 300},
{"香蕉", 18, 180},
{"橘子", 10, 150},
{"猕猴桃", 9, 270}
};
int numItems = sizeof(items) / sizeof(items[0]);
packBean(20, items, numItems);
return 0;
}