PAT_甲级_1006 Sign In and Sign Out

题目大意:

每天第一个到机房的人要把门打开,最后一个离开的人要把门关好。现有一堆杂乱的机房签到、签离记录,请根据记录找出当天开门和关门的人。(没有人同时签到或者同时签离)

算法思路:

该题目的思路大体有2种.
第一种就是首先使用结构体数组student保存所有的学生,然后先按照到达时间升序排列,数组中第一个元素就是最先到达的学生,然后按照离开时间降序排列,数组中第一个元素就是最后离开的学生。
第二种就是使用2个结构体变量a和b分别保存当前Sign_in_time最小和Sign_out_time最大的学生,
在输入完毕后,就可以输出对应的ID_number即可。这里采用了第一种方法,但是第二种方法更优。

提交结果:

PAT_甲级_1006 Sign In and Sign Out_第1张图片

AC代码:
#include
#include
#include

using namespace std;

struct Student{
    string ID_number;
    int Sign_in_time;
    int Sign_out_time;
};

int getSeconds(int hh,int mm,int ss){
    return hh*3600+mm*60+ss;
}

bool cmpByIn(Student a,Student b){
    return a.Sign_in_timeb.Sign_out_time;
}

int main(){
    int M;
    scanf("%d",&M);
    Student student[M];
    char id[20];
    int hh,mm,ss;
    for(int i=0;i

你可能感兴趣的:(算法-数据结构,c++)