每日刷题 考勤刷卡

一.题目

小蓝负责一个公司的考勤系统, 他每天都需要根据员工刷卡的情况来确定每个员工是否到岗。 当员工刷卡时, 会在后台留下一条记录, 包括刷卡的时间和员工编号, 只要在一天中员工刷过一次卡, 就认为他到岗了。 现在小蓝导出了一天中所有员工的刷卡记录,请将所有到岗员工的员工编号列出。

二.题目要求

1.输入描述 输入的第一行包含一个正整数 n,表示一天中所有员工的刷卡记录的条数。 接下来 n 行, 每行包含一条刷卡记录, 每条刷卡记录的格式为:

HH:MM:SS ID

其中 HH:MM: SS表示刷卡时间, HH 为一个0到23之间的两位十进制整数 (可能含前导 0) 表示时, MM 为一个0到 59之间的两位十进制整数(可能含前导0) 表示分, SS 为一个0到59之间的两位十进制整数(可能含前导0) 表示秒, ID 为一个不含前导0的整数表示员工的编号。

所有记录按照刷卡时间升序排列, 可能同一时刻有多人刷卡。

2.输出格式 输出若干行, 每行包含一个整数, 按照从小到大的顺序输出, 表示到岗员工的编号。

三.思路分析

根据题干要求,采用sort函数(在c++里面,用于给定区间的所有元素排序,默认升序排序)

在用else if语句判断有没有员工重复打卡

 

四.代码

#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
  int n,x;
  string a;//除去时间
  scanf("%d",&n);
  int di[n];
  for(int i=0;i<n;i++)
  {
    cin>>a>>di[i];
  }
  sort(di,di+n);//对数据排序
  x=di[0];
  for(int i=0;i<n;i++)
  {
      if(i==0)
    printf("%d\n\n",di[i]);
    else
    {
        if(x==di[i])//与前面相同不输出
        {
            x=di[i];
            continue;
        }
        else
        {
            x=di[i];
            printf("%d\n\n",di[i]);
        }
    }
  }
  return 0;
}

五.运行效果

posted @ 2024-01-28 02:26  南辞几经秋  阅读(25)  评论(0)    收藏  举报