算法题-考勤信息

该文章详细描述了一个Java程序,用于检查员工的考勤记录,判断是否存在缺勤超过一次、任意七天内缺勤/迟到/早退超过3次或连续迟到/早退的情况。
摘要由CSDN通过智能技术生成
 
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();
            StringBuilder sb = new StringBuilder();
            for(int i = 0;i < num;i ++){
                String[] split = sc.nextLine().split("\\s+");
                List<String> list = Arrays.asList(split);
                //缺勤超过一次 || 任意7天缺勤/迟到/早退超过3次 || 连续迟到或者早退
                if(absentMoreThanOne(list) || isBadAttendance(list) ||  
                isNotContinuousAttendance(list)){
                    sb.append("false");
                    sb.append(" ");
                    continue;
                }
                sb.append("true");
                sb.append(" ");
            }
            System.out.println(sb.substring(0,sb.length()));
        }
    }
    public static boolean absentMoreThanOne(List<String> list){
        int size = list.size();
        int count = 0;
        for(String s : list) {
            if ("absent".equals(s)) {
                count++;
            }
        }
         return count > 1;
    }
    public static boolean isBadAttendance(List<String> list){
        int size = list.size();
        int[] ints = new int[size];
        for(int i = 0;i < size;i ++){
            ints[i] = list.get(i).equals("present") ? 0 : 1;
        }
        if(size <= 7){
          return Arrays.stream(ints).sum() > 3;
        }
        for(int i = 0;i <= size - 7;i ++){
            int[] newInts = Arrays.copyOfRange(ints, 0, i + 7);
            if(Arrays.stream(newInts).sum() > 3){
                return true;
            }
        }
        return false;
    }
    public static boolean isNotContinuousAttendance(List<String> list){
        List<String> res = Arrays.asList("late","leaveearly");
        int size = list.size();
        for(int i = 1;i < size;i ++){
            if(res.contains(list.get(i)) && res.contains(list.get(i - 1))){
                return true;
            }
        }
        return false;
    }
}

  • 10
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值