题目描述

职工有职工号,姓名,年龄.输入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
可以用三个数组来存取职工的职工号、姓名、年龄等信息,也可以用结构体来做。
    注意:定义员工姓名时,需要用一个二维数组来定义,如 char name[30][10];因为每
个名字都相当于一个一位数组。
    主要思路: 遍历三次,第一次遍历找到年龄最小的,若年龄相等,就比较职工号,若
职工号相等,则继续比较员工姓名,姓名比较是字符串比较,所以需要可以用strcmp函数直接比较(需要加include<string.h>头文件),如strcmp(name[i],name[k]),若前
者小于后者,则返回一个小于0的数字,当第一次遍历结束后,可以找到最小的一个值(有
可能第一个就是最小),输出,并将当前年龄赋值为101,目的是此处的最小值已经输出,
第二次遍历找次最小值时,第一次输出值的位置是不用考虑的。接着输出第二次找到的最
小值(也就是整个输入的次最小值),并将此位置的年龄赋值为101,第三次遍历是同样的
道理。 
方法一:
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
   int i,j,n,k;
   int number[30];
   char name[30][10];
   int year[30];
   while(cin>>n)
     {
        for(i=0;i<n;i++)
           cin>>number[i]>>name[i]>>year[i];
        for(j=0;j<3;j++)
         {
            k=0;
            if(n>3)
            {
               for(i=0;i<n;i++)
                { if(year[i]<year[k])
                      k=i;
                  else if (year[i]==year[k])
                   {
                      if(number[i]<number[k])
                             k=i;
                      else if(number[i]==number[k])
                         {
                             if(strcmp(name[i],name[k])<0)
                                k=i;
                         }
                   
                }
            }
            cout<<number[k]<<" "<<name[k]<<" "<<year[k]<<endl;
            year[k]=101;
         }
     }
}
方法二:
#include<iostream>
#include<vector>
#include<string>
#include<string.h>
#include<algorithm>
using namespace std;
typedef struct person
   {
     int  number;
     string name;
     int  year;
   }person;
static bool comp(person a,person b)
    {
      if(a.year<b.year)
          return true;
      else if(a.year==b.year)
          {
            if(a.number<b.number)
                return true;
            else if(a.number==b.number)
               {
                 //if(strcmp(a.name,b.name)<0)
                    // return true;
                 if(a.name<b.name)
                     return true;               
               }
          }
      return false;
    }
int main()
   {  
       int n;
       //vector<person> vec;  注意:如果在这里定义会出错,因为输入多组数据时一直都保存,而不是每次新建一个容器
       while(cin>>n)
        {        
          person worker;
          vector<person> vec;
          for(int i=0;i<n;i++) 
             {
                cin>>worker.number>>worker.name>>worker.year;
                vec.push_back(worker);
             }
          sort(vec.begin(),vec.end(),comp);  //sort里面可以自定义比较函数
          for(int i=0;i<3;i++) 
              {
                cout<<vec[i].number<<" "<<vec[i].name<<" "<<vec[i].year<<endl;
              }
        }
     return 0;
   

C++编程题-职工有职工号,姓名,年龄.输入n个职工的信息,找出3个年龄最小的职工打印出来相关推荐

  1. 假设一个公司的医疗保健数据库有如下 3 个关系: 职工(职工号,姓名,性别,职务,家庭地址,部门编号) 部门(部门编号,部门名称,办公地址,电话) 保健(保健卡编号,职工号,检查身体日期,健

    假设一个公司的医疗保健数据库有如下 3 个关系: 职工(职工号,姓名,性别,职务,家庭地址,部门编号) 部门(部门编号,部门名称,办公地址,电话) 保健(保健卡编号,职工号,检查身体日期,健康状况) ...

  2. Java黑皮书课后题第10章:*10.18(大素数)编写程序找出五个大于Long.Max_VALUE的素数

    10.18(大素数)编写程序找出五个大于Long.Max_VALUE的素数 题目 破题 代码 运行结果 题目 10.18(大素数)编写程序找出五个大于Long.Max_VALUE的素数 破题 类似编程 ...

  3. Java编程题小练习(初级):输入10个整数并进行排序输出。

    程序代码: package com.xingzhao.Test; /** 题目描述:输入10个整数,排序后输出.* * 分析:* 1.输入10个整数,存储为数组* 2.使用冒泡排序法将数组排序* 3. ...

  4. 学生结构体,学生有姓名 学号 三门成绩 班级人数为五人 。实现 1:第一门成绩的平均分;2:找出两门以上不及格的学生,输出他们的姓名学号及三门成绩; 3:找出平均分在90分以上或者全部成绩在85分以上

    #include <stdio.h> #include <stdlib.h> #include <string.h> #define SIZE 5 #define ...

  5. 笔试算法题(28):删除乱序链表中的重复项 找出已经排好序的两个数组中的相同项...

    出题:给定一个乱序链表,节点值为ASCII字符,但是其中有重复项,要求去除重复项并保证不改变剩余项的原有顺序: 分析:创建一个256(2^8)大小的bool数组,初始化为false,顺序读取链表,将字 ...

  6. 十二个球称三次C语言编程,十二个球,有一个不知轻重,现有一个天平,称三次,找出此球!...

    平均分成A.B.C三组,每组4个: 第一秤:A.B两组先分别放天平左右: 情况一:平衡.则问题出在C组,A.B组共8个为标准球. 第二秤用3个标准球和C组的3个球对比, 如果第二秤平衡,剩下的一个就是 ...

  7. c语言编程输出1000以内能被3整除的数,【C语言】找出1000以内可以被3整除的数

    分别用while,do-while,for语句实现 方法一:while #include int main() { int m; m = ; while (m<=) { if (m % == ) ...

  8. 题7.15:要求输入一个职工号,用折半查找法查找出该职工的姓名,从主函数输入要查找的职工号,输出该职工姓名。按职工号由小到大顺序排序,姓名顺序也随之调整

    题目 本题是谭浩强<C程序设计课后习题>题7.15. 题目: 写几个函数: 1.输入10个职工的姓名和职工号. 2.按职工号由小到大顺序排序,姓名顺序也随之调整 3.要求输入一个职工号,用 ...

  9. PTA练习 Java模拟题 编程题

    7-1 各类字符数 (20 分) 从键盘输入一个字符串,程序输出该字符串中的大写英文字母数,小写英文字母数以及非英文字母数 输入格式: 字符串 输出格式: 大写英文字母数 小写英文字母数 非英文字母数 ...

最新文章

  1. 中国计算机学会论坛上5专家激辩:量子计算机10年内成熟?中美之间还有5-6年差距...
  2. 大型数据中心蓄电池规划与应用中的痛点及展望
  3. 搜索引擎的选择—百度还是谷歌?
  4. 用jQuery实现网页卷轴的效果
  5. 原创 | 科普一个 Star 数为 28.5k 的云原生网关
  6. Nokia 920全部CODE
  7. python utc 时间
  8. [翻译] ZLHistogramAudioPlot
  9. Linux 30岁了~我们也老了
  10. python中什么是主要数据类型_python中基本数据类型是什么
  11. 富士康被黑客攻击,索要 2.3 亿元赎金:已加密约1200台服务器,窃取了100 GB的未加密文件,并删除20~30TB的备份
  12. mysql .myi权限_Day02-a.m.-MySQL体系结构与用户权限管理
  13. UVA763 LA5339 Fibinary Numbers【大数】
  14. 【渝粤教育】国家开放大学2018年秋季 2115T人体解剖学与组织胚胎学 参考试题
  15. 智能时代 什么样的家庭安防系统更靠谱?
  16. 【js】js获取今日和昨日0点和23点59分59秒
  17. 在Excel里快速插入目录
  18. uis向3d投影全息界面的连续演化。
  19. hapi mysql项目实战路由初始化_hapi框架搭建记录(三):Joi数据校验和Sequelize(数据迁移、填充数据)...
  20. 记录配置Jupyter kernels

热门文章

  1. [oracle 10g]命令行启动ORACLE服务及顺序
  2. 2-7 微信摇一摇_实现分析
  3. 仿函数functors
  4. socket编程(九)
  5. vsftp 客户端多个ip_VSFTP环境搭建
  6. 初中生学python教材推荐_推荐中学生看的几本书
  7. 印花导带容易出现的问题及其解决方法
  8. Netkiller 手札 2019 CHM 格式电子书下载
  9. How to remove ROM in MAME
  10. 【Codeforces549F】Yura and Developers [单调栈][二分]