#include <stdio.h>
#include <stdlib.h>
typedef struct {
const char *name;
double weight;
double value;
double valueKg;
}Fruit;
int des(const void *a, const void *b) {
Fruit *fruitA = (Fruit *)a;
Fruit *fruitB = (Fruit *)b;
if (fruitA->valueKg > fruitB->valueKg)
return -1;
if (fruitA->valueKg < fruitB->valueKg)
return 1;
return 0;
}
void bag(Fruit fruits[], int size, double capacity) {
double total_value = 0.0;
printf("装水果策略如下:\n");
for (int i = 0; i < size; i++) {
if (capacity == 0) break;
if (fruits[i].weight <= capacity) {
capacity -= fruits[i].weight;
total_value += fruits[i].value;
printf("%s: %.2f kg\n", fruits[i].name, fruits[i].weight);
} else {
double part = capacity / fruits[i].weight;
total_value += fruits[i].value * part;
printf("%s: %.2f kg\n", fruits[i].name, capacity);
capacity = 0;
}
}
printf("总价值为:%.2f 元\n", total_value);
}
int main() {
Fruit fruits[] = {
{"苹果", 15, 300},
{"香蕉", 18, 180},
{"橘子", 10, 150},
{"猕猴桃", 9, 270}
};
const int size = sizeof(fruits) / sizeof(fruits[0]);
for (int i = 0; i < size; i++) {
fruits[i].valueKg = fruits[i].value / fruits[i].weight;
}
qsort(fruits, size, sizeof(Fruit), des);
double capacity = 20;
bag(fruits, size, capacity);
return 0;
}