PAT Advanced Level 1006 Sign In and Sign Out
1. 题目简述及在线测试位置
1.1 给定员工的打卡记录:员工ID Check-In Check-Out ,要求统计出最早到的人和最晚走的人
1.2 在线测试位置: 1006 Sign In and Sign Out
2. 基本思路
2.1 通过结构体数组存储数据:对于到岗和离岗时间,剔除冒号:后,以整型存储
2.2 扫描结构体数组,找到最早到岗时间 和 最晚离岗时间
3. 完整AC代码
#include <string>
#include <iostream>
using namespace std;
#define MAX 10000
struct Record
{
string ID;
int LogIn;
int LogOut;
};
int DelSymbol(string Str);
int main()
{
int N;
cin >> N;
struct Record worklog[MAX];
for(int i=0;i<N;i++)
{
string ID, LogIn, LogOut;
cin >> ID >> LogIn >> LogOut;
int In, Out;
In = DelSymbol(LogIn);
Out = DelSymbol(LogOut);
worklog[i].ID = ID;
worklog[i].LogIn = In;
worklog[i].LogOut = Out;
}
int Min = -1, MinLogIn = 999999, Max = -1, MaxLogOut = 0;
for (int i = 0; i < N; i++)
{
if (worklog[i].LogIn < MinLogIn)
{
MinLogIn = worklog[i].LogIn;
Min = i;
}
if (worklog[i].LogOut > MaxLogOut)
{
MaxLogOut = worklog[i].LogOut;
Max = i;
}
}
cout << worklog[Min].ID << " " << worklog[Max].ID;
return 0;
}
int DelSymbol(string Str)
{
char c[10],Count=0;
for (int i = 0; i < Str.length(); i++)
{
if (Str[i] != ':')
c[Count++] = Str[i];
}
c[Count] = '\0';
return stoi(c);
}