网站上线准备工作,杨凌开发建设局网站,网站建设策划方案t,淘宝店网站建设题目描述
考勤记录是分析和考核职工工作时间利用情况的原始依据#xff0c;也是计算职工工资的原始依据#xff0c;为了正确地计算职工工资和监督工资基金使用情况#xff0c;公司决定对员工的手机打卡记录进行异常排查。
如果出现以下两种情况#xff0c;则认为打卡异常…题目描述
考勤记录是分析和考核职工工作时间利用情况的原始依据也是计算职工工资的原始依据为了正确地计算职工工资和监督工资基金使用情况公司决定对员工的手机打卡记录进行异常排查。
如果出现以下两种情况则认为打卡异常
实际设备号与注册设备号不一样同一个员工的两个打卡记录的时间小于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备注
clockRecords长度 1000clockRecords[i]格式{id},{time},{distance},{actualDeviceNumber},{registeredDeviceNumber}id由6位数字组成time由整数组成范围为0~1000distance由整数组成范围为0~100actualDeviceNumber和registeredDeviceNumber由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
解题思路
用对象EmployeeRecord存储打卡记录并先判断实际设备号与注册设备号是否一致。将打卡记录存储在对象列表中遍历打卡记录的列表 计算打卡时间计算打卡距离如果两个打卡记录时间小于60并且打卡距离超过5km打卡异常设置vaild为False 得到打卡异常的记录并返回字符串。
解题代码
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,ABCDclockRecords [[100000, 10, 1, ABCD, ABCD],[100000, 80, 10, ABCE, ABCD]]assert solve_method(clockRecords) 100000,80,10,ABCE,ABCDclockRecords [[100000, 10, 1, ABCD, ABCD],[100000, 80, 10, ABCE, ABCE]]assert solve_method(clockRecords) null