当前位置:   article > 正文

华为OD机试之考勤信息(Java源码)_华为od 考勤信息

华为od 考勤信息

考勤信息

题目描述

公司用一个字符串来表示员工的出勤信息

  • 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");
		}
	}
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81

运行示意图:
在这里插入图片描述

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号