1. 程式人生 > >題目1013:開門人和關門人(字符串處理)

題目1013:開門人和關門人(字符串處理)

代碼 nbsp 字符串處理 博客園 簽到 style tdi reat sca

問題來源

  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:開門人和關門人(字符串處理)