题目1013:开门人和关门人(字符串处理)
问题来源
http://ac.jobdu.com/problem.php?pid=1013
问题描述
每个人有一个签到时间和一个签退时间,找到最早签到和最晚签退的那个人的ID。
问题分析
这里我本以为需要用结构体存下所有人的ID、签到时间、签退时间,然后sort排下序,找到需要的那两个人的ID。再仔细想想,不需要这么麻烦啊,为什么不输入一个,处理一个,用几个变量存下当前最早签到和最晚签退,最后输入完了,也就找到了相应的人的ID。还是挺简单的这题。
通过这道题,我顺便研究了一下cher*和char[],研究结果:http://www.cnblogs.com/AlvinZH/p/6815414.html
参考代码
// // Created by AlvinZH on 2017/5/5. // Copyright (c) AlvinZH. All rights reserved. // #include <iostream> #include <cstdio> #include <cstring> #include <string> #include <algorithm> using namespace std; char S[64]; char E[64]; int Sh,Sm,Ss;//记录最早签到时间 int Eh,Em,Es;//记录最晚签退时间 bool early,later; void solve(char *id,char *Stime,char *Etime) { int sh=(Stime[0]-'0')*10+(Stime[1]-'0'); int sm=(Stime[3]-'0')*10+(Stime[4]-'0'); int ss=(Stime[6]-'0')*10+(Stime[7]-'0'); int eh=(Etime[0]-'0')*10+(Etime[1]-'0'); int em=(Etime[3]-'0')*10+(Etime[4]-'0'); int es=(Etime[6]-'0')*10+(Etime[7]-'0'); if(sh!=Sh) early=sh<Sh; else if(sm!=Sm) early=sm<Sm; else early=ss<Ss; if(eh!=Eh) later=eh>Eh; else if(em!=Em) later=em>Em; else later=es<Es; if(early) { strcpy(S,id); Sh=sh;Sm=sm;Ss=ss; } if(later) { strcpy(E,id); Eh=eh;Em=em;Es=es; } } int main() { int n,m; char id[64]; char Stime[10]; char Etime[10]; scanf("%d",&n); for(int i=0;i<n;i++) { Sh=24;Sm=60;Ss=60; Eh=0;Em=0;Es=0; scanf("%d",&m); for(int j=0;j<m;j++) { scanf("%s %s %s",id,Stime,Etime); solve(id,Stime,Etime); } printf("%s %s\n",S,E); } }
作者: AlvinZH
出处: http://www.cnblogs.com/AlvinZH/
本人Github:https://github.com/Pacsiy/JobDu
本文版权归作者AlvinZH和博客园所有,欢迎转载和商用,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。