年底,报销都挤在一堆,财务忙得不可开交。每个报销表包括姓名,各项费用的金额。对于每个报销单,这里规定按如下要求处理: 金额高的优先处理; 若金额相等时,则姓名字典序小的优先处理; 若金额和姓名都相等,则按报销单来得早的优先处理。 请帮财务排好报销单的处理顺序。 使用C(gcc)格式)
时间: 2024-02-05 07:13:46 浏览: 106
以下是一个简单的C语言实现,使用结构体保存报销单信息,并使用快速排序进行排序:
```c
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
// 定义报销单结构体
struct Expense {
char name[20]; // 姓名
int amount; // 金额
int order; // 报销单顺序
};
// 比较函数,用于快速排序
int cmp(const void* a, const void* b) {
struct Expense* e1 = (struct Expense*)a;
struct Expense* e2 = (struct Expense*)b;
if (e1->amount != e2->amount) {
return e2->amount - e1->amount; // 金额高的优先处理
}
if (strcmp(e1->name, e2->name) != 0) {
return strcmp(e1->name, e2->name); // 姓名字典序小的优先处理
}
return e1->order - e2->order; // 按报销单来得早的优先处理
}
int main() {
int n; // 报销单数目
scanf("%d", &n);
struct Expense expenses[n];
for (int i = 0; i < n; i++) {
scanf("%s %d", expenses[i].name, &expenses[i].amount);
expenses[i].order = i; // 记录报销单顺序
}
qsort(expenses, n, sizeof(struct Expense), cmp);
for (int i = 0; i < n; i++) {
printf("%s %d\n", expenses[i].name, expenses[i].amount);
}
return 0;
}
```
这段代码读入报销单信息并使用快速排序将其排序,最后输出排序后的报销单顺序。
阅读全文