当前位置: 首页 > article >正文

华为OD E卷(100分)37-考勤信息

前言

        工作了十几年,从普通的研发工程师一路成长为研发经理、研发总监。临近40岁,本想辞职后换一个相对稳定的工作环境一直干到老, 没想到离职后三个多月了还没找到工作,愁肠百结。为了让自己有点事情做,也算提高一下自己的编程能力,无聊之余打算用一些大厂的编程题练练手。希望通过这些分享能够帮到一些人,也希望能和看到此文的大神们沟通交流,提升自己,更希望在此期间能够找到一份理想的工作。

题目描述

        K小姐是一家公司的人力资源经理,他需要根据员工的出勤记录来决定是否发放考勤奖励。公司规定了以下出勤状态:

  1. absent:缺勤
  2. late:迟到
  3. leaveearly:早退
  4. present:正常出勤

        员工获得考勤奖励需满足以下全部条件:

  1. 缺勤次数不超过 1 次;
  2. 没有连续的迟到或早退;
  3. 任意连续7 天内,缺勤、迟到和早退的次数总和不超过 3 次。

        请你帮助K小姐编写一个程序,判断每位员工是否能获得考勤奖励。

输入

第一行包含一个正整数n,表示员工的总数。
接下来 n 行,每行包含若干个空格分隔的字符串,表示一名员工的出勤记录。

输出

        输出n 行,每行为 true 或 false,表示对应的员工是否能获得考勤奖励。

示例 

示例1

输入
2
present 
present present
输出

true
true

说明

两名员工的出勤记录都满足获得奖励的条件,因此输出两个 true。

示例2

输入
2
present
present absent present present leaveearly present absent
输出

true
false

说明

第一名员工满足条件,输出 true。第二名员工有 2 次缺勤,不满足条件 1,因此输出 false。

数据范围

1≤n≤100
每个员工的出勤记录不超过1000 条。

解题思路

        滑动窗口。

题解

Java实现

package huawei.e100;

import java.util.Scanner;

/**
* @author arnold
* @date 2024年12月24日
* 考勤信息
*/
public class T37 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		while(sc.hasNext()) {
	        int n = sc.nextInt();
	        sc.nextLine();
	        for (int i = 0; i < n; i++) {
	        	String[] kq = sc.nextLine().split(" ");
				boolean res = run(kq);
				if (res) {
					System.out.println("true");
				} else{
					System.out.println("false");
				}
			}
		}
	}
	
	/** 计算考勤是否能得到奖励
		缺勤次数不超过 1 次;
		没有连续的迟到或早退;
		任意连续7 天内,缺勤、迟到和早退的次数总和不超过 3 次。
	*/
	static boolean run(String[] kq) {
		boolean prepresent = true;
		for (int i = 0; i < kq.length; i++) {
			int nopresentTime = 0;
			// 7天时间窗滑块
			for (int j = i; j < kq.length && j < i+7; j++) {
				if(kq[j].equals("absent")) {
					return false;  //缺勤
				} else if (kq[j].equals("late") || kq[j].equals("leaveearly")) {
					if (prepresent == false) {
						return false;  //连续的迟到或早退
					} else {
						nopresentTime++;
						prepresent = false;
					}
				} else {
					prepresent = true;
				}
			}
			if (nopresentTime > 3) {
				return false;  //任意连续7 天内,缺勤、迟到和早退的次数总和超过 3 次
			}
		}
		return true;
	}

}

 


http://www.kler.cn/a/458690.html

相关文章:

  • 数据的高级处理——pandas模块进阶——数据的统计运算
  • 前端页面展示本电脑的摄像头,并使用js获取摄像头列表
  • SQL如何添加数据?|SQL添加数据示例
  • C语言 练习
  • 计算机网络•自顶向下方法:网络应用原理
  • DAY178内网渗透之内网对抗:横向移动篇入口差异切换上线IPC管道ATSC任务Impacket套件UI插件
  • 基于 Paimon x Spark 采集分析半结构化 JSON 的优化实践
  • Spring Retry + Redis Watch实现高并发乐观锁
  • UI页面布局分析(5)- 评分弹窗的实现
  • 【PCIe 总线及设备入门学习专栏 5.1 -- PCIe 引脚 PRSNT 与热插拔】
  • Edge Scdn是用来干什么的?
  • 用户界面的UML建模05
  • element-plus在Vue3中开发相关知识
  • AI文献阅读ChatDOC 、ChatPDF 哪个好?
  • 如何在Linux上配置SSH密钥以实现免密登录
  • PostgreSQL 初始化配置设置
  • Unity功能模块一对话系统(4)实现个性文本标签
  • 2024-12-29-sklearn学习(25)无监督学习-神经网络模型(无监督) 烟笼寒水月笼沙,夜泊秦淮近酒家。
  • Leetcode 3405. Count the Number of Arrays with K Matching Adjacent Elements
  • 【LangChain】Chapter1 - Models, Prompts and Output Parsers
  • 【开源免费】基于SpringBoot+Vue.JS网上摄影工作室系统(JAVA毕业设计)
  • PostgreSQL中FIRST_VALUE、LAST_VALUE、LAG 和 LEAD是窗口函数,允许返回在数据集的特定窗口(或分区)内访问行的相对位置
  • 软件测试之单元测试
  • 技术周总结 12.23~12.29 周日(C#异步线程及调试)
  • 网络畅通无阻:计算机网络知识点复习指南
  • Empire Lupin One靶机