当前位置:首页>java>【每日编程-20期】HD大学上机题(二)

【每日编程-20期】HD大学上机题(二)

  • 2026-10-21 13:28:34
【每日编程-20期】HD大学上机题(二)
HD上机题(二)

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

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

输入样例:

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

输出样例:

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

解决方法:

(1)算法的基本思想:

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

(2)代码实现:

#include#includeusingnamespacestd;//定义时间结构体typedefstruct{int hour;int min;int sec;} time;//定义员工结构体typedefstruct{char id[100];    time t1, t2;  //定义上班和下班的时间int workTime; //员工的工作时间} employee;//比较员工上班时间最早的boolcmp1(employee a, employee b){if (a.t1.hour != b.t1.hour)return a.t1.hour < b.t1.hour;elseif (a.t1.min != b.t1.min)return a.t1.min < b.t1.min;elsereturn a.t1.sec < b.t1.sec;}//比较员工下班时间最晚的boolcmp2(employee a, employee b){if (a.t2.hour != b.t2.hour)return a.t2.hour > b.t2.hour;elseif (a.t2.min != b.t2.min)return a.t2.min > b.t2.min;elsereturn a.t2.sec > b.t2.sec;}//比较员工留在单位的时间最长的boolcmp3(employee a, employee b){return a.workTime > b.workTime;}intmain(){//判断输入时间的合法性本示例程序省略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");return0;}
明日预告:HD上机题(三)

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

输入格式:

第一行 M N

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

s 和 t

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

输出格式:

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

输入样例:

3 4a b c dc d a ba c c d2 2a bc d

输出样例:

2

最新文章

随机文章