签到与签出
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。其余内容均为作者原创。
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。