// 异常的打卡记录
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 循环将数组当前下标的左侧和右侧乘积算出来,再进行比较,如果相等就将当前下标保存到数组中,最后...