【华为OD机考】华为OD笔试真题解析(15)--异常的打卡记录

embedded/2025/3/1 3:40:41/

题目描述

考勤记录是分析和考核职工工作时间利用情况的原始依据,也是计算职工工资的原始依据,为了正确地计算职工工资和监督工资基金使用情况,公司决定对员工的手机打卡记录进行异常排查。

如果出现以下两种情况,则认为打卡异常:

  1. 实际设备号与注册设备号不一样;
  2. 同一个员工的两个打卡记录的时间小于60分钟并且打卡距离超过5km。

给定打卡记录的字符串数组clockRecords(每个打卡记录组成为:工号、时间(分钟)、打卡距离(km)、实际设备号、注册设备号),返回其中异常的打卡记录(按输入顺序输出)。

输入描述

第一行输入为N,表示打卡记录数;之后的N行表示打卡记录,每一行表示一条打卡记录。

例如:

2
100000,10,1,ABCD,ABCD
100000,50,10,ABCD,ABCD

输出描述

输出为异常的打卡记录,例如:

100000,10,1,ABCD,ABCD;100000,50,10,ABCD,ABCD

备注

  1. clockRecords长度 <= 1000
  2. clockRecords[i]格式:{id},{time},{distance},{actualDeviceNumber},{registeredDeviceNumber}
  3. id由6位数字组成
  4. time由整数组成,范围为0~1000
  5. distance由整数组成,范围为0~100
  6. actualDeviceNumberregisteredDeviceNumber由4位大写字母组成

示例描述

示例一

输入:

2
100000,10,1,ABCD,ABCD
100000,50,10,ABCD,ABCD

输出:

100000,10,1,ABCD,ABCD;100000,50,10,ABCD,ABCD

说明:
第一条记录是异常的,因为第二条记录与它的间隔不超过60分钟,但是打卡距离超过了5km,同理第二条记录也是异常的。

示例二

输入:

2
100000,10,1,ABCD,ABCD
100000,80,10,ABCE,ABCD

输出:

100000,80,10,ABCE,ABCD

说明:
第二条记录的注册设备号与打卡设备号不一致,所以是异常记录。

示例三

输入:

2
100000,10,1,ABCD,ABCD
100000,80,10,ABCE,ABCE

输出:

null

说明:
无异常打卡记录,所以返回null

解题思路

  1. 用对象EmployeeRecord存储打卡记录,并先判断实际设备号与注册设备号是否一致。
  2. 将打卡记录存储在对象列表中
  3. 遍历打卡记录的列表:
    • 计算打卡时间
    • 计算打卡距离
    • 如果两个打卡记录时间小于60,并且打卡距离超过5km,打卡异常,设置vaildFalse
  4. 得到打卡异常的记录并返回字符串。

解题代码

python">def solve_method(clock_records):employee_records = []for record in clock_records:employee_record = EmployeeRecord(record[0], record[1], record[2], record[3], record[4])employee_record.set_vaild(employee_record.check_device_number())employee_records.append(employee_record)for i in range(len(employee_records)):for j in range(i + 1, len(employee_records)):if employee_records[i].id == employee_records[j].id:# 计算打卡时间time_diff = abs(employee_records[i].time - employee_records[j].time)# 计算打卡距离distance_diff = abs(employee_records[i].distance - employee_records[j].distance)# 如果两个打卡记录时间小于60,并且打卡距离超过5km,打卡异常if time_diff < 60 and distance_diff > 5:employee_records[i].vaild = Falseemployee_records[j].vaild = False# 得到打卡异常的记录result = ";".join(str(record) for record in employee_records if not record.vaild)return "null" if len(result) == 0 else resultclass EmployeeRecord:def __init__(self, id, time, distance, actual_device_number, registered_device_number):self.id = idself.time = timeself.distance = distanceself.actual_device_number = actual_device_numberself.registered_device_number = registered_device_number# 打卡是否合法self.vaild = Truedef set_vaild(self, vaild):self.vaild = vailddef __str__(self):return f"{self.id},{self.time},{self.distance},{self.actual_device_number},{self.registered_device_number}"def check_device_number(self):# 实际设备号与注册设备号不一致,打卡异常if self.actual_device_number == self.registered_device_number:return Truereturn Falseif __name__ == '__main__':clockRecords = [["100000", 10, 1, "ABCD", "ABCD"],["100000", 50, 10, "ABCD", "ABCD"]]assert solve_method(clockRecords) == "100000,10,1,ABCD,ABCD;100000,50,10,ABCD,ABCD"clockRecords = [["100000", 10, 1, "ABCD", "ABCD"],["100000", 80, 10, "ABCE", "ABCD"]]assert solve_method(clockRecords) == "100000,80,10,ABCE,ABCD"clockRecords = [["100000", 10, 1, "ABCD", "ABCD"],["100000", 80, 10, "ABCE", "ABCE"]]assert solve_method(clockRecords) == "null"

在这里插入图片描述


http://www.ppmy.cn/embedded/168954.html

相关文章

Nginx 报错:413 Request Entity Too Large

做web开发时&#xff0c;对于上传附件的功能&#xff0c;如果nginx没有调整配置&#xff0c;上传大一点的文件就会发生下面这种错误&#xff1a; 要解决上面的问题&#xff0c;只需要调整Nginx配置文件中的 client_max_body_size 参数即可&#xff0c;这个配置参数一般在http配…

行为型模式 - 职责链模式 (Chain of Responsibility Pattern)

行为型模式 - 职责链模式 (Chain of Responsibility Pattern) 职责链模式是一种行为设计模式&#xff0c;它允许你将请求沿着处理者链进行传递&#xff0c;直到有一个处理者能够处理该请求为止。以下是几个职责链模式的经典案例。 在企业中&#xff0c;员工请假需要不同级别的…

学习路程八 langchin核心组件 Models补充 I/O和 Redis Cache

前序 之前了解了Models&#xff0c;Prompt&#xff0c;但有些资料又把这块与输出合称为模型输入输出&#xff08;Model I/O&#xff09;‌&#xff1a;这是与各种大语言模型进行交互的基本组件。它允许开发者管理提示&#xff08;prompt&#xff09;&#xff0c;通过通用接口调…

WordPress网站502错误全面排查与解决指南

502 Bad Gateway错误是WordPress站长最常遇到的服务器问题之一,它意味着服务器作为网关或代理时,未能从上游服务器获取有效响应。针对WP可能出现的502问题,本文提供一些基础到进阶的解决方案供大家参考:) 一、502错误的本质和核心诱因 502错误属于HTTP状态码中的5xx系列,…

执行git操作时报错:`remote: [session-b8xxxda3] Access denied ...`解决方案

问题描述&#xff1a; 执行git push -u origin "master"时报错&#xff1a; > remote: [session-b849cda3] Access denied > fatal: unable to access https://gitee.com/jyunee/maibobo.git/: The requested URL returned error: 403表示没有权限访问远程仓库…

学习路程七 langchain核心组件 Prompt

前序 之前的ollama下载好了deepsseek-r1的镜像&#xff0c;运行了。我这电脑真慢的要死。之后要用这玩意儿还是回家用家里那个好点的电脑。 大致运行效果如下&#xff1a; 太吃配置了&#xff0c;建议有免费的还是用在线的吧。即使没有免费了充一点点&#x1f90f;&#x1f3…

【easy视频 | day01】项目了解 + 登录注册 + 使用 token 作为客户端请求令牌

文章目录 前言完成任务1. 项目了解2. 登录注册2.1 创建数据表2.2 验证码如果使用 Session 存储验证码&#xff1a;不用 Session 存储验证码&#xff0c;用 Redis 会有什么问题? 2.3 注册功能2.4 登录功能2.5 自动登录2.6 退出登录 总结 前言 本项目非原创&#xff0c;我只是个…

next.js-学习3

next.js-学习3 6. 设置数据库1. 传代码到github https://github.com/2. github和Vercel链接&#xff0c;用Vercel预览和部署3. 创建数据库4. 初始化数据库 7.读取数据1. 在/app/lib/data.ts中这两行是连接postgres的2. 在/app/dashboard/page.tsx中使用3.在/app/dashboard/page…