最小年龄的职员

来源:互联网 发布:太极越狱网络异常 编辑:程序博客网 时间:2024/04/28 22:07

题目描述:
职工有职工号,姓名,年龄.输入n个职工的信息,找出3个年龄最小的职工打印出来。
输入描述:
输入第一行包括1个整数N,1<=N<=30,代表输入数据的个数。
接下来的N行有N个职工的信息:
包括职工号(整数), 姓名(字符串,长度不超过10), 年龄(1<=age<=100)
输出描述:
可能有多组测试数据,对于每组数据,
输出结果行数为N和3的较小值,分别为年龄最小的职工的信息。
关键字顺序:年龄>工号>姓名,从小到大

个人思路分析:
定义一个职工结构体变量;
利用模板定义一个存储职工信息的顺序表;
输入之后;对输入信息进行条件排序(利用C++库函数算法中的void sort(RandomAccessIterator first,RandomAccessIterator last,Compare comp);)comp接受的是一个接受范围中的两个元素作为参数的二进制函数,并返回可转换为的值bool。返回的值指示作为第一个参数传递的元素是否被视为在第二个定义的特定严格弱排序之前。
因此我们只需定义一个这样的comp函数,便可以实现按照关键字顺序进行排序。
下面是代码实现:

#include<iostream>#include<algorithm>#include<vector>#include<string>using namespace std;typedef struct worker //职工结构体{    int number;    string name;    int age;}worker;static bool cmp(worker a, worker b){    if (a.age < b.age)    {        return true;    }    else if (a.age == b.age)    {        if (a.number < b.number)        {            return true;        }        else if (a.number == b.number)        {            if (a.name < b.name)            {                return true;            }        }    }    return false;}int main(){    int n;    vector<worker> vet;    worker x;    while (cin >> n)    {        for (int i = 0; i < n; i++)        {            cin >> x.number >> x.name >> x.age;            vet.push_back(x);        }        sort(vet.begin(), vet.end(), cmp);        for (int i = 0; i < 3; i++)        {            cout << vet[i].number << " " << vet[i].name << " " << vet[i].age;            cout << endl;        }    }}
3 1
原创粉丝点击