pat-A1006-Sign In and Sign Out

题目链接->link

题意描述

给出n个人进出实验室的时间,最早进的人开门,最晚出的人锁门,找出最早进和最晚出的人,规定没有同时进和同时出的人。

思路

  1. 做法和B1028-人口普查一样:https://blog.csdn.net/MichealWu98/article/details/104054881
  2. 因为输入不存在相同的进、出时间,故对每次输入只要判断是否大于当前最晚出的时间和是否小于当前最早出的时间并更新即可。

代码

#include <stdio.h>
#include <math.h>
#include <string.h>
#include <iostream>

using namespace std;

struct person{
    char id[16];
    int sign_in_h,sign_in_m,sign_in_s,sign_out_h,sign_out_m,sign_out_s;
}temp,earlist,latest;

void init(){//初始化最早到和最晚出的人
    earlist.sign_in_h=23;
    earlist.sign_in_m=59;
    earlist.sign_in_s=59;
    latest.sign_out_h=00;
    latest.sign_out_m=00;
    latest.sign_out_s=00;
}

bool moreEqu(person a,person b){//判断离开时间是否大于当前最晚出的时间
    if(a.sign_out_h!=b.sign_out_h)return a.sign_out_h>b.sign_out_h;
    else if(a.sign_out_m!=b.sign_out_m)return a.sign_out_m>b.sign_out_m;
    else return a.sign_out_s>b.sign_out_s;
}

bool lessEqu(person a,person b){//判断进入时间是否小于当前最早到的时间
    if(a.sign_in_h!=b.sign_in_h)return a.sign_in_h<b.sign_in_h;
    else if(a.sign_in_m!=b.sign_out_m)return a.sign_out_m<b.sign_out_m;
    else return a.sign_out_s<b.sign_out_s;
}

int main(){
    init();
    int n,i;
    scanf("%d",&n);
    for(i=0;i<n;i++){
        scanf("%s %d:%d:%d %d:%d:%d",temp.id,&temp.sign_in_h,&temp.sign_in_m,&temp.sign_in_s,&temp.sign_out_h,&temp.sign_out_m,&temp.sign_out_s);
        if(moreEqu(temp,latest))latest=temp;
        if(lessEqu(temp,earlist))earlist=temp;
    }
    printf("%s %s\n",earlist.id,latest.id);
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值