题目
公司用一个字符串来表示员工的出勤信息
- absent:缺勤
- ate:迟到
- eaveearly:早退
- present:正常上班
现需根据员工出勤信息,判断本次是否能获得出勤奖,能获得出勤奖的条件如下:
1、缺勤不超过一次;
2、没有连续的迟到/早退;
3、任意连续7次考勤,缺勤/迟到/早退不超过3次。
输入描述
用户的考勤数据字符串
- 记录条数 >= 1;
- 输入字符串长度 < 10000;
- 不存在非法输入;
如:
2
present
present absent present present leaveearly present absent
输出描述
根据考勤数据字符串,如果能得到考勤奖,输出”true”;否则输出”false”,
对于输入示例的结果应为:
true false
解题思路
将员工的考勤数据字符串拆分为单个记录,然后依次检查每个记录。首先统计缺勤次数,如果超过一次则直接返回 false。接着检查是否有连续的迟到或早退,如果存在则返回 false。同时,滑动窗口检查每个连续的7天考勤记录,如果缺勤、迟到或早退的次数超过3次,则返回 false。最终,如果所有条件都满足,则返回 true,表示可以获得出勤奖。最后将所有判断结果用空格分割输出。
代码
def can_get_attendance_reward(attendance_data):
records = attendance_data.split()
absent_count = 0
for i in range(len(records)):
if records[i] == "absent":
absent_count += 1
if absent_count > 1:
return False
if i > 0 and (records[i] == "late" or records[i] == "leaveearly") and (records[i - 1] == "late" or records[i - 1] == "leaveearly"):
return False
if i >= 6:
count = 0
for j in range(i - 6, i + 1):
if records[j] in ["absent", "late", "leaveearly"]:
count += 1
if count > 3:
return False
return True
if __name__ == "__main__":
n = int(input().strip())
results = []
for _ in range(n):
attendance_data = input().strip()
results.append(str(can_get_attendance_reward(attendance_data)).lower())
print(" ".join(results))