【每日编程-360期】杭州电子科技大学上机题(二)

教育   2024-11-19 10:02   广西  

杭州电子科技大学上机题(二)


每日编程中遇到任何疑问、意见、建议请公众号留言或加入每日编程群聊739635399



输入N个员工,每个员工输出ID号,上班时间,下班时间,
第一行输出最早去的员工的ID和上班时间
第二行输出最迟走的员工的ID和下班时间
第三行输出工作最久的员工的ID和上班时间

输入样例:

ID100001 07:00:00 17:00:00
ID100002 08:00:00 18:00:00
ID100003 09:00:00 21:00:00

输出样例:

OPEN:ID100001, 07:00:00
CLOSE:ID100003, 21:00:00
LONGEST WORK TIME ID:ID100003, 09:00:00


解决方法:

(1)算法的基本思想:

本题主要是基于比较,将结构体定义在一起,主要是其中将所有的时间化作秒来计算比较方便

(2)代码实现:

#include 
#include 
using namespace std;
//定义时间结构体
typedef struct
{

    int hour;
    int min;
    int sec;
} time;
//定义员工结构体
typedef struct
{

    char id[100];
    time t1, t2;  //定义上班和下班的时间
    int workTime; //员工的工作时间
} employee;
//比较员工上班时间最早的
bool cmp1(employee a, employee b)
{
    if (a.t1.hour != b.t1.hour)
        return a.t1.hour < b.t1.hour;
    else if (a.t1.min != b.t1.min)
        return a.t1.min < b.t1.min;
    else
        return a.t1.sec < b.t1.sec;
}
//比较员工下班时间最晚的
bool cmp2(employee a, employee b)
{
    if (a.t2.hour != b.t2.hour)
        return a.t2.hour > b.t2.hour;
    else if (a.t2.min != b.t2.min)
        return a.t2.min > b.t2.min;
    else
        return a.t2.sec > b.t2.sec;
}
//比较员工留在单位的时间最长的
bool cmp3(employee a, employee b)
{
    return a.workTime > b.workTime;
}
int main()
{
    //判断输入时间的合法性本示例程序省略
    cout << "输入员工的数目:";
    int n = 0;
    cin >> n;
    employee em[100]; //假设最多存在100个员工
    cout << "输入每个员工的id,以及上下班时间:" << endl;
    for (int i = 0; i < n; i++)
    {
        cin >> em[i].id;
        scanf("%2d:%2d:%2d", &em[i].t1.hour, &em[i].t1.min, &em[i].t1.sec);
        scanf("%2d:%2d:%2d", &em[i].t2.hour, &em[i].t2.min, &em[i].t2.sec);
        em[i].workTime = (em[i].t2.hour * 3600 + em[i].t2.min * 60 + em[i].t2.sec) - (em[i].t1.hour * 3600 + em[i].t1.min * 60 + em[i].t1.sec);
    }
    //比较上班的时间来的最早的,每进行一次比较,就输出一次排序后的结果
    sort(em, em + n, cmp1);
    cout << "OPEN:";
    cout << em[0].id << "  ";
    printf("%.2d:%.2d:%.2d\n", em[0].t1.hour, em[0].t1.min, em[0].t1.sec);
    sort(em, em + n, cmp2);
    cout << "CLOSE:";
    cout << em[0].id << "  ";
    printf("%.2d:%.2d:%.2d\n", em[0].t2.hour, em[0].t2.min, em[0].t2.sec);
    sort(em, em + n, cmp3);
    cout << "LONGEST WORK TIME ID:";
    cout << em[0].id << "  ";
    printf("%.2d:%.2d:%.2d\n", em[0].t1.hour, em[0].t1.min, em[0].t1.sec);
    system("pause");
    return 0;
}

明日预告:杭州电子科技大学上机题(三)

有一个M*N的材料和一个s*t的模板,从材料中切除模板,求最大能切出来的模板的数量。

输入格式:

第一行 M N

下面的M行N列:材料的具体内容

s 和 t

下面的s行t列:模板材料的具体内容

输出格式:

最大能切出来的模板的数量

输入样例:

3 4
a b c d
c d a b
a c c d
2 2
a b
c d

输出样例:

2


灰灰考研
最全的【计算机考研】【软件考研】考研信息! 最丰富的共享资料! 最大程度上帮助学渣狗登上研究生大门!
 最新文章