输出N件航材中价值最高航材的信息 编写C语言程序,输出N件航材中价值最高航材的信息。N用符号常量定义为5,航材信息包括件号(PN)、名称(Designation)、单价(Price)。注意:件号为长整型,名称是没有空格的字符串,最长不超过30个字符,单价为float类型。 输入格式: "%ld%s%f" 输出格式: "%ld %s %.0f\n"
时间: 2024-03-16 17:43:39 浏览: 126
基于可靠性数据的航材周转件库存管理优化
下面是按照方案二中的方法实现的代码:
```c
#include <stdio.h>
#include <string.h>
#define N 5
typedef struct {
long pn; // 件号
char designation[31]; // 名称
float price; // 单价
} Aircraft;
// 最小堆的比较函数
int cmp(const void *a, const void *b) {
Aircraft *p1 = (Aircraft *)a;
Aircraft *p2 = (Aircraft *)b;
return p1->price > p2->price ? 1 : -1;
}
int main() {
Aircraft aircrafts[N];
printf("请输入%d件航材的信息:\n", N);
for (int i = 0; i < N; i++) {
printf("请输入第%d件航材的信息:\n", i + 1);
printf("件号:");
scanf("%ld", &aircrafts[i].pn);
printf("名称:");
scanf("%s", aircrafts[i].designation);
printf("单价:");
scanf("%f", &aircrafts[i].price);
}
// 维护一个大小为1的最小堆
Aircraft heap[1];
heap[0].price = -1; // 初始堆顶为一个极小值
for (int i = 0; i < N; i++) {
if (aircrafts[i].price > heap[0].price) {
heap[0] = aircrafts[i];
qsort(heap, 1, sizeof(Aircraft), cmp);
}
}
printf("价值最高的航材信息如下:\n");
printf("%ld %s %.0f\n", heap[0].pn, heap[0].designation, heap[0].price);
return 0;
}
```
注意,上述代码中使用了最小堆来维护当前价值最高的K件航材。首先初始化一个大小为1的最小堆,堆顶元素的初始值为一个极小值。然后遍历所有航材,对于每个航材,如果其价值大于堆顶元素的价值,就将其加入堆中,然后弹出堆顶元素(即当前价值最低的航材),最后堆中剩余的航材即为价值最高的K件航材。
输出时按照题目要求使用`%ld%s%.0f`格式输出。
阅读全文