考勤问题
描述
公司用一个字符串来标识员工的出勤信息
absent: 缺勤
late: 迟到
leaveearly:早退
present: 正常上班
现需根据员工出勤信息,判断本次是否能获得出勤奖,
能获得出勤奖的条件如下:
1.缺勤不超过1次
2.没有连续的迟到/早退
3.任意连续7次考勤 缺勤/迟到/早退 不超过3次。
输入描述
用户的考勤数据字符串记录条数 >=1
输入字符串长度 <10000 ;
不存在非法输入
如:
2
present
present absent present present leaveearly present absent
输出描述
根据考勤数据字符串
如果能得到考勤奖输出true否则输出false
对于输出示例的结果应为
true false
示例1:
输入
2
present
present present
输出
true true
示例2:
输入
2
present
present absent present present leaveearly present absent
输出
true false
法一
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int num = sc.nextInt();
sc.nextLine();
String[] records = new String[num];
for (int i = 0 ; i < num ; i++) {
records[i] = sc.nextLine();
}
//用list来储存结果
List<String> list = new ArrayList<>();
for (String record : records) {
list.add(String.valueOf(judge(record.split(" "))));
}
System.out.println(String.join( " ", list ));
}
}
private static boolean judge(String[] str) {
//缺勤不超过一次
for (int i = 0 ; i < str.length ; i++) {
int count = 0 ;
if ("absent".equals(str[i])) {
count++;
}
if (count > 1) {
return false;
}
}
//没有连续迟到早退
for (int i = 1 ; i < str.length ; i++) {
String yesterday = str[i - 1];
String today = str[i];
if (("leavearly".equals(yesterday) || "late".equals(yesterday)) &&
("leaveearly".equals(today) || "late".equals(today))) {
return false;
}
}
//连续七次考勤,迟到早退缺勤不超过三次
if (str.length >= 7) {
for (int i = 0 ; i < str.length ; i++) {
int count = 0;
if (i + 7 > str.length) {
break;
}
for (int j = i; j < i + 7 ; j++) {
String today = str[j];
if ("absent".equals(today) || "late".equals(today) ||
"leaveearly".equals(today)) {
count++;
if (count >= 3) {
return false;
}
}
}
}
}
return true;
}
}