PAT甲级 A1006 Sign In and Sign Out
随手记录,只希望能帮助到同样遇到问题的小伙伴呀~
还是学生,水平有限,写的不好的地方有请指正~
这题没什么东西,无非需要把unlock时间和lock时间从输入的格式转成容易比较的形式(我转成秒数了),然后获取最小的unlock时间和最大的lock时间。
代码
#include<iostream>
using namespace std;
int main(){
int n;
cin>>n;
string id_l;
string id_u;//记录结果
int u=24*3600+1;//初始的unlock时间,因为要找最小值,所以设成一天的秒数+1
int l=-1;//初始的lock时间,因为要找最大值,所以设成-1
string unlock_time;
string lock_time;//暂存的输入的每个用户的unlock与lock时间字符串
for(int i=0;i<n;++i){
string id;//输入用户的id
cin>>id;
cin>>unlock_time>>lock_time;//输入unlock与lock时间
//这里采用了比较原始的也比较简单的处理方式,因为是hour:minute:second的形式
//使用下标直接访问每个字符串获取十位个位的值然后相加就转化为int了
int hour=(unlock_time[0]-'0')*10+(unlock_time[1]-'0');
int min=(unlock_time[3]-'0')*10+(unlock_time[4]-'0');
int sec=(unlock_time[6]-'0')*10+(unlock_time[7]-'0');
//统一转化成秒的形式,容易比较
int unlock_time_int=hour*3600+min*60+sec;
hour=(lock_time[0]-'0')*10+(lock_time[1]-'0');
min=(lock_time[3]-'0')*10+(lock_time[4]-'0');
sec=(lock_time[6]-'0')*10+(lock_time[7]-'0');
int lock_time_int=hour*3600+min*60+sec;
//获取最小unlock时间和最大lock时间并记录相应id
if(unlock_time_int<u){
u=unlock_time_int;
id_u=id;
}
if(lock_time_int>l){
l=lock_time_int;
id_l=id;
}
}
cout<<id_u<<" "<<id_l<<endl;
return 0;
}