考勤信息 - 华为OD统一考试(C卷)

OD统一考试(C卷)

分值: 100分

题解: Java / Python / C++

alt

题目描述

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

  • absent:缺勒
  • late: 迟到
  • leaveearly: 早退
  • present: 正常上班

现需根据员工出勤信息,判断本次是否能获得出勤奖,能获得出勤奖的条件如下:

  • 缺勤不超过一次,
  • 没有连续的迟到/早退:
  • 任意连续7次考勤,缺勒/迟到/早退不超过3次

输入描述

第一行输入一个整数n,表示有多少个员工

后面n行,每一行输入若干个字符串,表示第i名员工的出勤信息

输出描述

输出n行,每一行表示这名员工能否获得出勤奖,如果可以,则输出“true",否则输出”false"

示例1

输入:
2
present
present present

输出:
true true

示例2

输入:
2
present
present absent present present leaveearly present absent

输出:
true false

题解

这是一个关于员工出勤情况的问题,主要涉及对员工出勤信息的分析和条件判断。下面是关于这个问题的一些解题思路和代码解释:

解题思路

  1. 使用一个HashMap(或字典)mp来映射字符串与整数的关系,方便后续的判断。其中,"absent"对应0,"late"和"leaveearly"对应1,"present"对应2。
  2. 遍历员工的出勤信息,同时维护计数器来记录缺勤次数连续7天正常上班次数
  3. 判断缺勤次数是否超过1次,如果超过则返回false。
  4. 判断连续的迟到/早退,如果发现连续的迟到/早退则返回false。
  5. 更新连续7天正常上班次数,同时判断缺勤/迟到/早退是否超过3次。
  6. 如果所有条件都满足,则返回true,表示员工能够获得出勤奖。

Java

import java.util.HashMap;
import java.util.Scanner;

/**
 * @author code5bug
 */

public class Main {

    static HashMap<String, Integer> mp = new HashMap<>();

    static {
        mp.put("absent", 0);
        mp.put("late", 1);
        mp.put("leaveearly", 1);
        mp.put("present", 2);
    }

    static boolean solve(String[] st) {
        int n = st.length;
        int absent_cnt = 0;       // 缺勤次数
        int week_present_cnt = 0; // 连续7天正常上班次数

        for (int i = 0; i < n; i++) {
            // 缺勤超过1次
            if (st[i].equals("absent") && ++absent_cnt > 1)
                return false;
            else if (st[i].equals("present"))
                week_present_cnt++;

                // 连续的迟到/早退
            else if (i > 0 && mp.get(st[i - 1]).equals(mp.get(st[i])) && mp.get(st[i]) == 1)
                return false;

            if (i >= 7 && st[i - 7].equals("present"))
                week_present_cnt--;

            // 缺勒/迟到/早退超过3次
            if (Math.min(i + 1, 7) - week_present_cnt > 3)
     

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

2024华为OD机试真题题解 文章被收录于专栏

华为OD机考(C卷、D卷)算法题库(绝对都是原题),帮助你上岸华为(已经不少小伙伴成功上岸)。提供Java、Python、C++ 三种语言的解法。每篇文章都有详细的解题步骤、代码注释详细及相关知识点的练习题。有问题,随时解答

全部评论
滑动窗口,窗口大小固定为7即可
点赞 回复
分享
发布于 04-26 10:05 浙江

相关推荐

5 2 评论
分享
牛客网
牛客企业服务