赞
踩
题目描述
公司用一个字符串来表示员工的出勤信息
- 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"); } } }
运行示意图:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。