- 题目描述:
职工有职工号,姓名,年龄.输入n个职工的信息,找出3个年龄最小的职工打印出来。
- 输入:
输入第一行包括1个整数N,1<=N<=30,代表输入数据的个数。
接下来的N行有N个职工的信息:
包括职工号(整数), 姓名(字符串,长度不超过10), 年龄(1<=age<=100)。
- 输出:
可能有多组测试数据,对于每组数据,
输出结果行数为N和3的较小值,分别为年龄最小的职工的信息。关键字顺序:年龄>工号>姓名,从小到大。
- 样例输入:
5
501 Jack 6
102 Nathon 100
599 Lily 79
923 Lucy 15
814 Mickle 65
- 样例输出:
501 Jack 6
923 Lucy 15
814 Mickle 65#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std; struct Worker{
int id;
char name[];
int age;
}; int n;
Worker worker[]; int cmp(const void *a, const void * b) {
Worker at = *(Worker *)a;
Worker bt = *(Worker *)b;
int ac =at.age - bt.age;
int idc = at.id - bt.id;
if(ac == ) {
if(idc == ) {
return strcmp(at.name,bt.name);
}
else {
return idc;
}
}
else {
return ac;
}
} int main(int argc, char const *argv[])
{
//freopen("input.txt","r",stdin);
while(scanf("%d",&n) != EOF) {
for(int i = ; i < n; i++) {
scanf("%d %s %d",&worker[i].id,worker[i].name, &worker[i].age);
}
qsort(worker, n, sizeof(worker[]), cmp);
int t = min(,n);
for(int i = ; i < t; i++) {
printf("%d %s %d\n",worker[i].id,worker[i].name,worker[i].age);
}
}
return ;
}