首页 > 试题广场 >

最小年龄的3个职工

[编程题]最小年龄的3个职工
  • 热度指数:11643 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
职工有职工号,姓名,年龄.输入n个职工的信息,找出3个年龄最小的职工打印出来。

输入描述:
输入第一行包括1个整数N,3<=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<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;

typedef struct Name{
    int age;
    int ID;
    string name;
}Name;

static bool comp(Name a,Name b)
{
    if(a.age<b.age)
        return true;
    else if(a.age==b.age)
    {
        if(a.ID<b.ID)
            return true;
        else if(a.ID==b.ID)
        {
            if(a.name<b.name)
                return true;
        }
    }
    return false;
}

int main()
{
    int N;
    while(cin>>N)
    {
        vector<Name> vec;
        Name temp;
        for(int i=0;i<N;i++)
        {
            cin>>temp.ID>>temp.name>>temp.age;
            vec.push_back(temp);
        }
        
        sort(vec.begin(),vec.end(),comp);
        
        for(int i=0;i<3;i++)
        {
            cout<<vec[i].ID<<" "<<vec[i].name<<" "<<vec[i].age<<endl;
        }
    }
    return 0;
}

发表于 2016-08-23 09:43:31 回复(2)
更多回答

python solution:

while True:
    try:
        a, arr = int(input()), []
        for i in range(a):
            id, name, age = input().split()
            arr.append([int(id), name, int(age)])
        for i in sorted(arr, key=lambda c: (c[2],c[0],c[1]))[:3]:
            print(i[0],i[1],i[2])
    except:
        break
发表于 2017-10-17 09:09:37 回复(1)
//就是比较,然后sort函数使用的时候不要忘记了要加上比较的函数
//输出的时候考虑到小于3的情况所以条件为(i<3&&i<n)避免越界错误
#include<bits/stdc++.h>
using namespace std;
struct Staff{
    int age;
    int id;
    char name[30];
};
bool cmp(Staff a,Staff b){
    if(a.age<b.age) return 1;
    else if(a.age==b.age){
        if(a.id<b.id) return 1;
        else if(a.id==b.id){
            int len1=strlen(a.name),len2=strlen(b.name);
            for(int i=0,j=0;i<len1&&j<len2;i++,j++)
                if(a.name[i]>b.name[j])
                    return 0;
            return 1;
        }
        else return 0;
    }
    else return 0;
}
int main(){
    int n;
    while(cin>>n){
        Staff *staff=new Staff[n];
        for(int i=0;i<n;i++)
            cin>>staff[i].id>>staff[i].name>>staff[i].age;
        sort(staff,staff+n,cmp);
        for(int i=0;i<3&&i<n;i++)
            cout<<staff[i].id<<" "<<staff[i].name<<" "<<staff[i].age<<endl;
    }
}

发表于 2020-01-16 10:06:52 回复(0)
#include <algorithm>
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
//自定义比较排名问题,这里用vector比较好
typedef struct worker{
    int id;
    int age;
    string name;
}Worker;
bool cmp(Worker a,Worker b){
    if(a.age!=b.age){
        return a.age<b.age;
    }
    else if(a.id!=b.id){
        return a.id<b.id;
    }
    return a.name<b.name;
}
int main(){
    int n;
    cin>>n;
    Worker temp;
    vector<Worker> works;
    for(int i = 0;i < n;i++){
        cin>>temp.id>>temp.name>>temp.age;
        works.push_back(temp);
    }
    sort(works.begin(),works.end(),cmp);
    if(n > 3)
        n = 3;
    for(int i = 0;i < n;i++){
        cout<<works[i].id<<" "<<works[i].name<<" "<<works[i].age<<endl;
    }
    return 0;
}

编辑于 2019-02-09 21:19:32 回复(1)
实现Comparable接口。
class Info implements Comparable<Info>{
    public int age;
    public int number;
    public String name;
    
    public Info(int number, String name, int age){
        this.age = age;
        this.number = number;
        this.name = name;
    }
       
    @Override
    public int compareTo(Info o){
        if(this.age!= o.age){
            return this.age-o.age;
        }else{
            return this.number-o.number;
        }
    }
}

发表于 2017-05-30 20:06:11 回复(0)
# include <stdio.h>
# include <string.h>
int main()
{
	struct Person
	{
		int number;
		char name[11];
		int age;
	};
	int n;
	while(scanf("%d", &n) != EOF)
	{
		int i,j,k;
		Person a[30];
		for (i = 0; i < n; i++)
			scanf("%d %s %d", &a[i].number, a[i].name, &a[i].age);
		k = (3>n)? n : 3;
		for (i = 0; i < k; i++)
			for (j = 1 + i; j < n; j++)
				if (a[i].age>a[j].age || (a[i].age == a[j].age && a[i].number>a[j].number)|| (a[i].age == a[j].age && a[i].number == a[j].number&& strcmp(a[i].name, a[j].name)>0))
				{
					Person temp = a[j];
					a[j] = a[i];
					a[i] = temp;
				}
		for (i = 0; i < k; i++)
			printf("%d %s %d\n", a[i].number, a[i].name, a[i].age);
	}
	return 0;
}

发表于 2017-04-13 21:52:24 回复(0)
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;

typedef struct staff
{
    int num;//工号
    char name[10];
    int age;
};

bool operator<(const staff & s_1,const staff & s_2)
{
    if(s_1.age == s_2.age)
    {
        if(s_1.num == s_2.num)
            return strcmp(s_1.name, s_2.name);
        else
            return s_1.num < s_2.num;
    }
    else
        return s_1.age < s_2.age;
}

int main(void)
{
    int n;
    vector<staff> s;
    
    while(cin >> n)
    {
        s.clear();
        
        for(int i = 0;i < n;i++)
        {
            staff temp;
            cin >> temp.num >> temp.name >> temp.age;
            s.push_back(temp);
        }
       
        sort(s.begin(),s.end());
        
        for(int i = 0;i < 3;i++)
        {
            cout << s[i].num << ' ' << s[i].name << ' ' << s[i].age;
            cout << endl;
        }
    }
    return 0;
}

发表于 2021-03-22 18:55:00 回复(0)
#include<stdio.h>
#include<string.h>
struct Worker{
    int num;
    char name[10];
    int age;
}wo[30];
int main()
{
    int n,i,j,tnum,tage;char tname[10];
    scanf("%d",&n);//输入
    for(i=0;i<n;i++)
        scanf("%d%s%d",&wo[i].num,wo[i].name,&wo[i].age);
    for(i=0;i<n-1;i++)//先按照年龄排序
        for(j=0;j<n-1-i;j++)
            if(wo[j].age>wo[j+1].age)
            {//全部交换
                tnum=wo[j].num;strcpy(tname,wo[j].name);tage=wo[j].age;
                wo[j].num=wo[j+1].num;strcpy(wo[j].name,wo[j+1].name);wo[j].age=wo[j+1].age;
                wo[j+1].num=tnum;strcpy(wo[j+1].name,tname);wo[j+1].age=tage;
            }
    for(i=0;i<n-1;i++)
        for(j=0;j<n-1-i;j++)
            if(wo[j].age==wo[j+1].age)//年龄相等的时候看工号
            {
                if(wo[j].num>wo[j+1].num)//对工号排序
                {//全部交换
                    tnum=wo[j].num;strcpy(tname,wo[j].name);tage=wo[j].age;
                    wo[j].num=wo[j+1].num;strcpy(wo[j].name,wo[j+1].name);wo[j].age=wo[j+1].age;
                    wo[j+1].num=tnum;strcpy(wo[j+1].name,tname);wo[j+1].age=tage;
                }
                if(wo[j].num==wo[j+1].num)//年龄工号全部相等看名字
                {
                    if(strcmp(wo[j].name,wo[j+1].name)>0)//对姓名排序
                    {//全部交换
                        tnum=wo[j].num;strcpy(tname,wo[j].name);tage=wo[j].age;
                        wo[j].num=wo[j+1].num;strcpy(wo[j].name,wo[j+1].name);wo[j].age=wo[j+1].age;
                        wo[j+1].num=tnum;strcpy(wo[j+1].name,tname);wo[j+1].age=tage;
                    }
                }
            }
    for(i=0;i<3;i++)
        printf("%d %s %d\n",wo[i].num,wo[i].name,wo[i].age);
}

编辑于 2020-03-30 15:31:02 回复(1)
/** \brief vector容器可以用sort()函数,只要自定义一下排序规则即可,sortFun()函数
 *
 * \param 
 * \param 
 * \return 
 *
 */     

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
struct info{
    unsigned id;
    string name;
    unsigned age;
};

bool sortFun(const info &a,const info &b){
    return a.age<b.age||(a.age==b.age&&a.id<b.id)||((a.age==b.age&&a.id==b.id)&&a.name<b.name); //按规则写好返回值
}

int main()
{
    int N,print_num;
    vector<info> all_info;
    info per;
    cin>>N;
    (N>3)?(print_num=3):(print_num=N);
    for(int i=0;i<N;++i){
        cin>>per.id>>per.name>>per.age;
        all_info.push_back(per);
    }
    sort(all_info.begin(),all_info.end(),sortFun);
    for(int i=0;i<print_num;++i)
        cout<<all_info[i].id<<' '<<all_info[i].name<<' '<<all_info[i].age<<endl;
    return 0;
}

编辑于 2020-03-11 15:36:12 回复(0)
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

typedef struct{
    int id;
    string name;
    int age;
}employee;

bool cmp(employee epy1, employee epy2)
{
    if(epy1.age == epy2.age && epy1.id == epy2.id)
        return epy1.name < epy2.name;
    else if(epy1.age == epy2.age && epy1.id != epy2.id) 
        return epy1.id < epy2.id;
    else 
        return epy1.age < epy2.age;
}

int main()
{
    int n; cin >> n;
    employee *epy = new employee[n];
    for (int i = 0; i < n; i++)
    {
        cin >> epy[i].id >> epy[i].name >> epy[i].age;
    }
    sort(epy, epy + n, cmp);
    for (int i = 0; i < (n < 3 ? n : 3); i++)
    {
        cout << epy[i].id << " " << epy[i].name << " " << epy[i].age << endl;
    }
    delete []epy;
}
编辑于 2020-02-07 15:05:07 回复(0)
#include<iostream>
#include<vector>
#include<cstring>
#include<algorithm>
using namespace std;
typedef struct student{
    int id;
    char name[100];
    int year;
}student;
bool com(student a,student b){
    if(a.year!=b.year) return a.year<b.year;
    else if(a.id!=b.id) return a.id<b.id;
    else return strcmp(a.name,b.name)<0;
}
int main(){
    int n;
    cin>>n;
    vector<student>s(n);
    for(int i=0;i<n;i++){
        cin>>s[i].id>>s[i].name>>s[i].year;
    }
    sort(s.begin(),s.end(),com);
    if(n<3){
        for(int i=0;i<n;i++){
            cout<<s[i].id<<" "<<s[i].name<<" "<<s[i].year<<endl;
        }    
    }
    else{
        for(int i=0;i<3;i++){
            cout<<s[i].id<<" "<<s[i].name<<" "<<s[i].year<<endl;
        }    
    }
    return 0;
}
发表于 2020-01-20 16:29:55 回复(0)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 100
typedef struct student{
    int num;
    char name[20];
    int year;
}student;
int main(){
    int n,i,j,k=0;
    student s[N];
    student temp;
    scanf("%d",&n);
    for(i=0;i<n;i++){
        scanf("%d",&s[i].num);
        scanf("%s",s[i].name);
        scanf("%d",&s[i].year);
    }
    for(i=0;i<n-1;i++){
        for(j=0;j<n-i-1;j++){
            if(strcmp(s[j].name,s[j+1].name)){
                temp=s[j];
                s[j]=s[j+1];
                s[j+1]=temp;
            }
        }
    }
    for(i=0;i<n-1;i++){
        for(j=0;j<n-i-1;j++){
            if((s[j].num>s[j+1].num)){
                temp=s[j];
                s[j]=s[j+1];
                s[j+1]=temp;
            }
        }
    }
    for(i=0;i<n-1;i++){
        for(j=0;j<n-i-1;j++){
            if((s[j].year>s[j+1].year)){
                temp=s[j];
                s[j]=s[j+1];
                s[j+1]=temp;
            }
        }
    }
    for(i=0;i<3;i++){
        printf("%d ",s[i].num);
        printf("%s ",s[i].name);
        printf("%d",s[i].year);
        printf("\n");
    }
    return 0;
}
发表于 2020-01-05 18:43:45 回复(0)
#include<bits/stdc++.h>
using namespace std;
struct staff{
    int number;
    char name[11];
    int age;
}st[30];
bool cmp(staff a,staff b){
    if(a.age!=b.age)return a.age<b.age;
    else if(a.number!=b.number)return a.number<b.number;
    else return strcmp(a.name,b.name)<0;
}
int main(){
    int n;
    while(scanf("%d",&n)!=EOF){
        for(int i=0;i<n;i++)
            scanf("%d %s %d",&st[i].number,st[i].name,&st[i].age);
        sort(st,st+n,cmp);
        for(int i=0;i<n;i++){
            if(i==3)break;
            printf("%d %s %d\n",st[i].number,st[i].name,st[i].age);
        }
    }
}
发表于 2019-03-28 19:19:32 回复(0)
#include<stdio.h>
#include<stdlib.h>

struct employ{
    int num;
    char name[101];
    int age;
};

int main(){
    int n;
    int i,j;
    struct employ *employee;
    scanf("%d",&n);
    employee=(struct employ *)malloc(sizeof(struct employ)*n);
    for(i=0;i<n;i++){
        scanf("%d %s %d",&employee[i].num,&employee[i].name,&employee[i].age);
    }
    for(i=0;i<3;i++){
        for(j=n-1;j>i;j--){
            if(employee[j-1].age>employee[j].age || (employee[j-1].age==employee[j].age && employee[j-1].num>employee[j].num) || (employee[j-1].age==employee[j].age && employee[j-1].num==employee[j].num && employee[j-1].name==employee[j].name)){
                struct employ tmp=employee[j-1];
                employee[j-1]=employee[j];
                employee[j]=tmp;
            }
        }
        if(j-1!=2)
            printf("%d %s %d\n",employee[j].num,employee[j].name,employee[j].age);
        else
            printf("%d %s %d",employee[j].num,employee[j].name,employee[j].age);
    }
    
    return 0;
}
发表于 2018-06-03 09:58:22 回复(0)

优先队列啊,埋个坑

发表于 2018-02-14 23:51:20 回复(0)
#include<stdio.h>
#include<string.h>
int main()
{
    typedef struct employee
    {
        int order;
        char name[10];
        int age;
    }employee;
    int N,n,i;
    employee a[30],b;
    while(scanf("%d",&N)!=EOF)
    {
            for(n=0;n<N;n++)
            scanf("%d%s%d",&a[n].order,a[n].name,&a[n].age);
             if(N>=3)
        {
            for(i=0;i<3;i++)
                for(n=0;n<N-i-1;n++)
                if(a[n].age<a[n+1].age)
            {
                b=a[n];
                a[n]=a[n+1];
                a[n+1]=b;
            }
            else if(a[n].age==a[n+1].age)
                if(a[n].order<a[n+1].order)
                {
                b=a[n];
                a[n]=a[n+1];
                a[n+1]=b;
                }
               else if(a[n].order==a[n+1].order)
                if(strcmp(a[n].name,a[n+1].name)<=0)
                {
                b=a[n];
                a[n]=a[n+1];
                a[n+1]=b;
                }
    for(n=N-1;n>N-4;n--)
        printf("%d %s %d\n",a[n].order,a[n].name,a[n].age);
    }
    else
    {
            for(i=0;i<N;i++)
                for(n=0;n<N-i-1;n++)
                if(a[n].age<a[n+1].age)
            {
                b=a[n];
                a[n]=a[n+1];
                a[n+1]=b;
            }
            else if(a[n].age==a[n+1].age)
                if(a[n].order<a[n+1].order)
                {
                b=a[n];
                a[n]=a[n+1];
                a[n+1]=b;
                }
               else if(a[n].order==a[n+1].order)
                if(strcmp(a[n].name,a[n+1].name)<=0)
                {
                b=a[n];
                a[n]=a[n+1];
                a[n+1]=b;
                }
    for(n=N-1;n>=0;n--)
        printf("%d %s %d\n",a[n].order,a[n].name,a[n].age);
    }
    }
    return 0;
}
发表于 2017-12-31 14:53:29 回复(0)
//标准答案
#include <iostream>
#include <string.h>
#include <vector>
#include <algorithm>
using namespace std;
struct staff{
    int id;
    char name[11];
    int age;
};
bool cmp(const staff s1,const staff s2);
bool cmp(const staff s1,const staff s2){    
    if(s1.age==s2.age) return s1.id<s2.id;
    if(s1.age==s2.age&&s1.id==s2.id) return strcmp(s1.name,s2.name)<0;
    return s1.age<s2.age;
}

int main(){
    int n;
    while(cin>>n){
        vector<staff> staffs(n);
        int i;
        for(i=0;i<n;i++)
            cin>>staffs[i].id>>staffs[i].name>>staffs[i].age;
        stable_sort(staffs.begin(),staffs.end(),cmp);
        int min=n>3?3:n;
        for(i=0;i<min;i++)
            cout<<staffs[i].id<<" "<<staffs[i].name<<" "<<staffs[i].age<<endl;
    }
    return 0;
}

编辑于 2017-12-09 16:36:48 回复(0)
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct employee
{
    int data;
    char name[10];
    int age;
}employee;
int comp(const void*a,const void*b)

    employee *as=(employee*)a;
    employee *bs=(employee*)b;
      if(as->age==bs->age)
    {
        if(as->data==bs->data)
            return strcmp(as->name,bs->name);
        return as->data-bs->data;
    }
    return as->age-bs->age;
}
int main()
{
    int n,i;
    employee a[100];
    while(scanf("%d",&n)!=EOF)
    {
        for(i=0;i<n;i++)
        {
            scanf("%d%s%d",&a[i].data,&a[i].name,&a[i].age);
        }
        qsort(a,n,sizeof(employee),comp);
        if(n<3)
        {
            for(i=0;i<n;i++)
            {
                printf("%d %s %d\n",a[i].data,a[i].name,a[i].age);
            }
        }
        else
        {
            for(i=0;i<3;i++)
            {
                printf("%d %s %d\n",a[i].data,a[i].name,a[i].age);
            }
        }
        
    }
    return 0;
}
发表于 2017-10-24 18:31:40 回复(0)
#include <iostream>
#include<algorithm>
#include <cstdio>
using namespace std;
struct worker{
    int num;
    char name[11];
    int age;

}work[31];

bool cmpage(worker a,worker b){
    if( a.age<b.age){
        return true;
    }
    if(a.age==b.age&&a.num<b.num){
        return true;
    }
    if(a.age==b.age&&a.num==b.num&&a.name<b.name){
        return true;
    }
    else{
        return false;
    }
};

int main() {
    int n;
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        scanf("%d %s %d",&work[i].num,work[i].name,&work[i].age);
    }
    sort(work,work+n,cmpage);

    for(int i=0;i<3;i++){
        printf("%d %s %d\n",work[i].num,work[i].name,work[i].age);
    }

}

发表于 2024-03-22 23:02:13 回复(0)
#include<stdio.h>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
typedef struct Person{
     int id;
     string name;
     int age;
}Person;
bool compare(Person a,Person b){
     if(a.age!=b.age){
        return a.age<b.age;
     }else{
        if(a.id!=b.id){
            return a.id<b.id;
        }else{
            return a.name<b.name;
        }
     }
}
int main(){
    int N;
    scanf("%d",&N);
    vector<Person> vec;
    int id,age;
    char name[100]={0};
    for(int i=0;i<N;i++){
        scanf("%d %s %d",&id,name,&age);
        Person p;
        p.id = id;
        p.name = name;
        p.age = age;
        vec.push_back(p);
    }

    sort(vec.begin(),vec.end(),compare);


    for(int i=0;i<3;i++){
printf("%d %s %d\n",vec[i].id,vec[i].name.c_str(),vec[i].age);
    }
}

编辑于 2024-03-18 20:51:15 回复(0)