2023 华为笔试题 0830

笔试时间:2023年8月30日 秋招

第一题

题目:智慧打卡系统

某家高科技公司为方便员工省去每日上下班的打卡操作,计划推广使用智慧打卡系统。其运行的原理是系统会记录员工当日进出门禁的时间(员工在上班期间可能会多次进出门禁,格式为24小时制,小时:分钟,“HH:MM”)。现在请编写一个算法,计算员工当日的工作时长(单位:分钟),具体要求如下:

1、单次离岗15min以内,不从工作时长中扣除。

2、12:00至14:00为午休时间,不算工作时长。

3、18:00至19:30为晚饭时间,不算工作明长。

解答要求

时间限制:C/C++1000ms其他语言:2000ms内存限制:C/C++256MB其他语言:512MB

输入描述

第一行:员工当天进门禁的次数n。

第二行:员工当天进门禁的所有时间,以空格分隔。

第三行:员工当天出门禁的次数m。

第四行:员工当天出门禁的所有时间,以空格分隔。

注:0<n,m<100,不存在相同的出入门禁时间,也不存在连续的出门禁或入门禁的情况。

输出描述

当日的工作时长。

样例输入

示例一:

5

07:50 08:50 12:30 13:40 19:50

5

08:45 12:20 13:20 18:30 20:30

示例二:

4

08:30 12:30 14:00 18:20

4

12:00 13:00 16:50 19:00

样例输出

530

解释:员工的工作时段为07:50-12:00,14:00~18:00,19:50~20:30,工作时长为530分钟

示例二:

380

解释员工的工作时段为08:30~12:00,14:00~16:50,工作时长为380分钟

参考题解

模拟

Python:

from datetime import datetime
format = "%H:%M"
n = int(input())
intime = [c for c in input().split()]
for i in range(n):
    intime[i] = datetime.strptime(intime[i], format)
m = int(input())
outtime = [c for c in input().split()]
for i in range(n):
    outtime[i] = datetime.strptime(outtime[i], format)
wuxiu_s, wuxiu_e = datetime.strptime("12:00", format), datetime.strptime("14:00", format)
wanfan_s, wanfan_e = datetime.strptime("18:00", format), datetime.strptime("19:30", format)
res = 0
tmp1 = []
tmp2 = []
tmp = []
#先处理小于15分钟的情况
for i in range(n-1):
    if ((intime[i+1] - outtime[i]).total_seconds() / 60) <= 15:
        tmp1.append(i+1)
        tmp2.append(i)


n1, n2 = [], []
for i in range(n):
    if i not in tmp1:
        n1.append(intime[i])
    if i not in tmp2:
        n2.append(outtime[i])
intime, outtime = n1, n2
for i in range(len(intime)):
    # 午休前进来 午休后出去
    if intime[i] < wuxiu_s and (wuxiu_s < outtime[i] < wuxiu_e or outtime[i] > wuxiu_e) :
        res += (wuxiu_s - intime[i]).total_seconds()/60
    # 午休进来  午休出去
    elif wuxiu_s < intime[i] < wuxiu_e and wuxiu_s < outtime[i] < wuxiu_e : continue
    #午休进来 午休后 晚饭前出去
    elif wuxiu_s < intime[i] < wuxiu_e and wuxiu_e < outtime[i] < wanfan_s :
        res += (outtime[i] - wuxiu_e).total_seconds()/60
    # 午休进来  晚饭的时候出去
    elif wuxiu_s < intime[i] < wuxiu_e and wanfan_s < outtime[i] < wanfan_e :
        res += (wanfan_s - wuxiu_e).total_seconds()/60
    #午休进来 晚饭后出去
    elif wuxiu_s < intime[i] < wuxiu_e and wanfan_e < outtime[i]:
        res += (wanfan_s - wuxiu_e + outtime[i

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

2023 秋招笔试题汇总解析 文章被收录于专栏

2023秋招各大笔试题汇总,c++,java,python多种语言分析,解答。

全部评论
第三题你是不是忘记释放内存了啊
点赞
送花
回复 分享
发布于 2023-09-05 16:37 江苏
完蛋,完全做不出来
点赞
送花
回复 分享
发布于 2023-09-28 22:02 北京
秋招专场
校招火热招聘中
官网直投

相关推荐

13 46 评论
分享
牛客网
牛客企业服务