牛客网 华中科技大学 最小年龄的3个职工

题目描述

职工有职工号,姓名,年龄.输入n个职工的信息,找出3个年龄最小的职工打印出来。

输入描述:

输入第一行包括1个整数N,1<=N<=30,代表输入数据的个数。
接下来的N行有N个职工的信息:
包括职工号(整数), 姓名(字符串,长度不超过10), 年龄(1<=age<=100)。

输出描述:

可能有多组测试数据,对于每组数据,
输出结果行数为N和3的较小值,分别为年龄最小的职工的信息。
关键字顺序:年龄>工号>姓名,从小到大。

示例1

输入

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
#include
#include

#define N 30

typedef struct node
{
    int num;
    char name[11];
    int age;
} node;

/*
void print(struct node *p)  
{  
    printf("%d %s %d\n", p->num, p->name, p->age);  
} 
*/
//定义cmp函数
int cmp(const void *a, const void *b)
{
    //强转类型,这一步不能省
    node * c = (node *) a;
    node * d = (node *) b;
    //结构体指针访问结构体成员用 ->  
    if(c->age != d->age)
    {
        return c->age - d->age;
    }
    else if(c->num != d->num)
    {
        return c->num - d->num;
    }
    else
    {
        return strcmp(c->name, d->name);
    }
}
int main()
{
    int n, i;
    node a[N];
    //读取职工人数
    while(scanf("%d", &n) != EOF)
    {
        //读取职工信息
        for(i = 0; i < n; i++)
        {
            scanf("%d %s %d", &(a[i].num), a[i].name, &(a[i].age));
        }
        //qsort包含在stdlib.h头文件里,函数一共四个参数,没返回值
        //qsort(参与排序的数组名或者开始排序的地址,参与排序的元素个数,
        //单个元素的大小“推荐使用sizeof(s[0])这样的表达式”,比较函数)
        qsort(a, n, sizeof(a[0]), cmp);
        //输出结果行数为N和3的较小值
        int min = n > 3? 3 : n;
        for(i = 0; i < min; i++)
        {
            //print(&a[i]);
            //结构体变量访问结构体成员用 .   
            printf("%d %s %d\n", a[i].num, a[i].name, a[i].age);
        }
    }
    return 0;
}

个人心得

升序排列:数据从低到高排列。

降序排列:数据从高到低排列。

以本题为例:
//强转类型
node * c = (node *) a;
node * d = (node *) b;
1、使用qsort(a, n, sizeof(a[0]), cmp);做升序排列,在int cmp(const void *a, const void *b)中,应该是
return c->age - d->age;
return c->num - d->num;
return strcmp(c->name, d->name);

2、使用qsort(a, n, sizeof(a[0]), cmp);做降序排列,在int cmp(const void *a, const void *b)中,应该是
return d->age - c->age;
return d->num - c->num;
return strcmp(d->name, c->name);

你可能感兴趣的:(机试题库)