编辑代码

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

#define MAX_FRUITS 4
#define MAX_WEIGHT 20

// 水果结构体
typedef struct {
    char name[20];
    int weight;
    int value;
    float valuePerWeight; // 单位价值
} Fruit;

// 交换两个水果的函数
void swapFruits(Fruit *a, Fruit *b) {
    Fruit temp = *a;
    *a = *b;
    *b = temp;
}

// 冒泡排序,按照单位价值从高到低排序
void sortFruits(Fruit fruits[], int numFruits) {
	int i,j;
    for (i = 0; i < numFruits - 1; ++i) {
        for (j = 0; j < numFruits - i - 1; ++j) {
            if (fruits[j].valuePerWeight < fruits[j + 1].valuePerWeight) {
                swapFruits(&fruits[j], &fruits[j + 1]);
            }
        }
    }
}

// 贪婪算法选择最优水果策略
void selectOptimalFruits(Fruit fruits[], int numFruits, int maxWeight) {
    // 计算单位价值(value/weight)
    int i;
    for (i = 0; i < numFruits; ++i) {
        fruits[i].valuePerWeight = (float)fruits[i].value / fruits[i].weight;
    }

    // 手动排序
    sortFruits(fruits, numFruits);

    // 装入水果的策略
    int remainingWeight = maxWeight;
    int totalValue=0; 
    for (i = 0; i < numFruits; ++i) {
        if (fruits[i].weight <= remainingWeight) {
            printf("%s \n", fruits[i].name);
            remainingWeight -= fruits[i].weight;
            totalValue+=fruits[i].value;
        }
    }
    printf("总价值为%d",totalValue);
}

int main() {
    // 初始化水果信息
    Fruit fruits[MAX_FRUITS] = {
        {"苹果", 15, 300},
        {"香蕉", 18, 180},
        {"橘子", 10, 150},
        {"猕猴桃", 9, 270}
    };

    printf("选择放进包中的水果为:\n");
    selectOptimalFruits(fruits, MAX_FRUITS, MAX_WEIGHT);

    return 0;
}