编辑代码

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

typedef struct {
    double weight;
    double value;
    double ratio;
} Bean;

int compare(const void* a, const void* b) {
    Bean* beanA = (Bean*)a;
    Bean* beanB = (Bean*)b;
    return (beanB->ratio > beanA->ratio) - (beanB->ratio < beanA->ratio);
}

double maxBeanValue(Bean beans[], int n, double maxWeight) {
    qsort(beans, n, sizeof(Bean), compare);

    double totalValue = 0.0;
    for (int i = 0; i < n; i++) {
        if (maxWeight > beans[i].weight) {
            maxWeight -= beans[i].weight;
            totalValue += beans[i].value;
        } else {
            totalValue += beans[i].value * (maxWeight / beans[i].weight);
            break;
        }
    }
    return totalValue;
}

int main() {
    // 示例数据
    Bean beans[] = {{10, 60, 6}, {20, 100, 5}, {30, 120, 4}};
    int n = sizeof(beans) / sizeof(beans[0]);
    double maxWeight = 50;

    // 计算
    double maxValue = maxBeanValue(beans, n, maxWeight);
    printf("Maximum value: %f\n", maxValue);

    return 0;
}