签到与签出

签到与签出

1. 题目地址

    https://www.acwing.com/problem/content/1480/

2. 题目解析

    这道题的目的是:要从一堆的记录里面,寻找到签到最早的ID和签出最晚的ID。
    注意:签到最早和签出最晚未必是同一个人。

3. 题解

    1.  对于这道题的输入,我们可以使用三个string类型的变量来接收。分别为:user_id,in_time,out_time。
    2.  我们可以声明四个变量:early_id,early_time,late_id,late_time。
    3.  在遍历记录的过程中,我们通过比较时间来得出:签到最早的时间及ID和签出最晚的时间及ID。
    4.  最后将两个ID输出即可。
    在上述的过程中,比较核心的一个问题就是:我们如何比较时间?
        由于这道题当中的时间是通过"hh:mm:ss"这样的格式(字符串)来给出。因此,每个时间的位数均相等。如果位数相等的话,我们可以通过字典序来比较各个时间的大小。换句话说,时间的顺序与字典序吻合。
        当使用C++的比较运算符来比较字符串时,默认就是按照字典序来进行比较的。

4. 代码

#include <iostream>
#include <cstdio>

using namespace std;

int main(){
    //最早签到的id和时间
    string early_id = "",early_time = "";
    //最晚签出的id和时间
    string late_id = "",late_time = "";
    int m;
    scanf("%d",&m);
    for(int i=0;i<m;i++){
        //读入记录
        string id,in_time,out_time;
        cin >> id >> in_time >> out_time;
        //更新最早签到时间与id
        if(!i || in_time < early_time){
            early_id = id;
            early_time = in_time;
        }
        //更新最晚签出时间与id
        if(!i || out_time > late_time){
            late_id = id;
            late_time = out_time;
        }
    }
    //输出最早签到的id和最晚签出的id
    cout << early_id  << " " << late_id;
    
    return 0;
}
    作者:gao79138
    链接:https://www.acwing.com/
    来源:本博客中的截图、代码模板及题目地址均来自于Acwing。其余内容均为作者原创。
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
posted @ 2023-09-08 14:25  夏目^_^  阅读(25)  评论(0)    收藏  举报