#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;
}