考勤信息
题目描述
公司用一个字符串来表示员工的出勤信息
- absent:缺勤
- late:迟到
- leaveearly:早退
- present:正常上班
现需根据员工出勤信息,判断本次是否能获得出勤奖,能获得出勤奖的条件如下:
- 缺勤不超过一次;
- 没有连续的迟到/早退;
- 任意连续7次考勤,缺勤/迟到/早退不超过3次。
如:
2
present
present absent present present leaveearly present absent
输入描述
用户的考勤数据字符串
- 记录条数 >= 1;
- 输入字符串长度 < 10000;
- 不存在非法输入;
输出描述
根据考勤数据字符串,如果能得到考勤奖,输出”true”;否则输出”false”,
true false
对于输入示例的结果应为:
用例
输入 | 2 present present present |
输出 | true true |
说明 | 无 |
输入 | 2 present present absent present present leaveearly present absent |
输出 | true false |
说明 | 无 |
源码和解析
解析:
这个题做好逻辑判断就行了
示例代码:
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;//考勤问题
public class T38 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int num = Integer.parseInt(sc.nextLine());// 记录条数for (int i = 0; i < num; i++) {String input = sc.nextLine();String kqArr[] = input.split(" ");// 一、缺勤不超过1次int queqinCoun = 0; // 不超过1次for (String kq : kqArr) {if (kq.equals("absent")) {queqinCoun++;if (queqinCoun > 1) {break;}}}if (queqinCoun > 1) {System.out.println("false");break;}// 二、没有连续的迟到/早退 迟到和早退 也是连续的 相当于一天干了俩个事情 也算List<String> cList = new ArrayList<String>();cList.add("late");cList.add("leaveearly");boolean isLateOrLeaveEarly = false;for (int j = 1; j < kqArr.length; j++) {if (cList.contains(kqArr[j]) && cList.contains(kqArr[j - 1])) {// 出现连续的迟到/早退isLateOrLeaveEarly = true;break;}}if (isLateOrLeaveEarly) {System.out.println("false");break;}// 三、任意连续的7次考勤 ,缺勤/迟到/早退不超过3次 即 缺勤次数+迟到次数+早退次数<=3// 双指针做法int start = 0;int end = kqArr.length >= 7 ? 6 : kqArr.length;int count = 0;// 违规次数cList.add("absent");// 判断连个指针之间的初始值内是否已经满足false情况for (int k = start; k < end; k++) {if (cList.contains(kqArr[k])) {count++;}}if (count > 3) {System.out.println("false");break;}while (end < kqArr.length - 1) {// 指针右侧end++;if (cList.contains(kqArr[end])) {count++;// 加进来的是满足的}if (cList.contains(kqArr[start])) {count--;// 移出去的也是满足的}start++; // 左指针也需要右移1位 保持两个指针之间能取得连续7位if (count > 3) {break;}}if (count > 3) {System.out.println("false");break;}System.out.println("true");}}
}
运行示意图: