最小年龄的3个职工

题目截图:

 

思路:

  关键字顺序:年龄>工号>姓名,从小到大自定义 cmp 函数,然后使用内置的 qsort 函数即可。qsort 的用法详见另一篇博客

 

代码如下:

 1 /*
 2     最小年龄的3个职工 
 3 */
 4 
 5 #include <stdio.h>
 6 #include <string.h>
 7 #include <math.h>
 8 #include <stdlib.h>
 9 #include <time.h>
10 #include <stdbool.h>
11 
12 // 员工结构体定义 
13 typedef struct {
14     int id;                // 职工号        
15     char name[11];        // 姓名 
16     int age;            // 年龄 
17 } staff; 
18 staff staffs[31];        // 存储所有员工数据 
19 
20 // 自定义排序
21 // 关键字顺序:年龄>工号>姓名,从小到大。 
22 int cmp(const void* a, const void* b) {
23     staff* c = (staff*)a;
24     staff* d = (staff*)b;
25     if(c->age == d->age) {
26         if(c->id == d->id) {
27             return strcmp(c->name, d->name);
28         } else {
29             return c->id - d->id;
30         }
31     } else {
32         return c->age - d->age;
33     }
34 }
35 
36 int main() {
37     int n, i;
38     while(scanf("%d", &n) != EOF) {
39         for(i=0; i<n; ++i) {            // 输入员工信息 
40             staff s;
41             scanf("%d %s %d", &s.id, s.name, &s.age);
42             staffs[i] = s;
43         }
44         // 按要求排序 
45         qsort(staffs, n, sizeof(staffs[0]), cmp);
46         // 输出结果行数为N和3的较小值
47         int min = (n<3 ? n : 3);
48         for(i=0; i<min; ++i) {            // 按要求输出 
49             staff s = staffs[i];
50             printf("%d %s %d\n", s.id, s.name, s.age);
51         }
52     } 
53 
54     return 0;
55 }

 

posted @ 2018-02-09 16:07  Just_for_Myself  阅读(214)  评论(0编辑  收藏  举报