签到与签出

签到与签出

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 @   夏目^_^  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示