首页 > 代码库 > 题目1013:开门人和关门人(字符串处理)

题目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和博客园所有,欢迎转载和商用,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

题目1013:开门人和关门人(字符串处理)