用c语言写一段贪心算法代码【问题描述】有n个集装箱要装上一艘载重量为W的轮船,其中集装箱i(1≤i≤n)的重量为wi。不考虑集装箱的体积限制,现要选出尽可能多的集装箱装上轮船,使它们的重量之和不超过W。 【测试用例】n=5,各集装箱重量{5,2,6,4,3};W=10;
时间: 2024-05-29 13:09:46 浏览: 105
#include <stdio.h>
#include <stdlib.h>
#define MAX_N 10000 // 最大集装箱数量
typedef struct {
int weight; // 集装箱重量
int index; // 集装箱编号(用于记录最终选中的集装箱)
} container;
int cmp(const void *a, const void *b) {
return ((container *)a)->weight - ((container *)b)->weight;
}
int main() {
int n, W;
container c[MAX_N];
// 输入集装箱数量和轮船载重量
scanf("%d%d", &n, &W);
// 输入每个集装箱的重量
for (int i = 0; i < n; i++) {
scanf("%d", &c[i].weight);
c[i].index = i + 1; // 编号从1开始
}
// 按重量从小到大排序
qsort(c, n, sizeof(container), cmp);
int i = 0;
int sum = 0;
while (i < n && sum + c[i].weight <= W) {
sum += c[i].weight;
i++;
}
printf("选中的集装箱编号为:");
for (int j = 0; j < i; j++) {
printf("%d ", c[j].index);
}
printf("\n");
return 0;
}
阅读全文