// 异常的打卡记录
func HW2023027() {
struct Record {
var staffId: Int
var time: Int
var distance: Int
var actualId: String
var registerId: String
func toString() -> String {
let temp = [String(self.staffId), String(self.time), String(self.distance), self.actualId, self.registerId]
return temp.joined(separator: ",")
}
}
var inputArr: [String] = []
// 测试用例
// inputArr = ["100000,10,1,ABCD,ABCD", "100000,50,10,ABCD,ABCD"]
// inputArr = ["100000,10,1,ABCD,ABCD", "100000,80,10,ABCE,ABCD"]
inputArr = ["100000,10,1,ABCD,ABCD", "100001,80,10,ABCE,ABCE"]
// 开始代码
// while let line = readLine() {
// inputArr.append(line)
// }
var arr: [Record] = []
for str in inputArr {
let tempArr = str.components(separatedBy: ",")
if tempArr.count == 5 {
let rec: Record = Record(staffId: Int(tempArr[0])!, time: Int(tempArr[1])!, distance: Int(tempArr[2])!, actualId: tempArr[3], registerId: tempArr[4])
arr.append(rec)
}
}
var resArr: [String] = []
for (i,rec1) in arr.enumerated() {
if rec1.actualId != rec1.registerId { // 判断是设备与注册设备是否一致
resArr.append(rec1.toString())
continue
}
for j in (i+1)..<arr.count {
let rec2 = arr[j]
if rec2.staffId != rec1.staffId {// 判断两工号是否一致
continue
}
let timeD = abs(rec1.time - rec2.time) // 两次打卡时间间隔
let distanceD = abs(rec1.distance - rec2.distance) // 两次打卡距离
if timeD<60 && distanceD>5 {
resArr.append(rec1.toString())
resArr.append(rec2.toString())
break
}
}
}
if resArr.count == 0 {
print("null")
}else {
print(resArr.joined(separator: ";"))
}
}
华为OD机试真题2023_Swift_100_异常的打卡记录
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 解题思路1、先对所有木材进行升序排列2、对木料m一节一节的减少,直到减少到 03、对升序的木板进行遍历,如果前一个...
- 解题思路双层 for 循环将数组当前下标的左侧和右侧乘积算出来,再进行比较,如果相等就将当前下标保存到数组中,最后...