2024年华为OD机试真题-考勤信息
华为OD机试真题-考勤信息-2024年OD统一考试(D卷)
题目描述:
公司用一个字符串来表示员工的出勤信息:
absent:缺勤
late:迟到
leaveearly:早退
present:正常上班
现需根据员工出勤信息,判断本次是否能获得出勤奖,能获得出勤奖的条件如下:
缺勤不超过一次;没有连续的迟到/早退;任意连续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
说明:
解题思路:
考察对字符串和遍历的理解和运用。
Java解法:
import java.util.*; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 创建Scanner对象来读取输入 int t = in.nextInt(); // 读取测试用例的数量 in.nextLine(); // 读取并丢弃剩余的换行符 // 处理每个测试用例 while (t-- > 0) { String line = in.nextLine(); // 读取一行数据,代表一组考勤记录 String[] v = line.split(" "); // 将考勤记录分割成数组,每个元素是一个考勤状态 boolean f = true; // 标志变量,初始设置为true,表示可能获得出勤奖 int cnt_absent = 0; // 缺勤次数的计数器 // 遍历所有考勤记录 for (int i = 0; i < v.length; i++) { if (v[i].equals("leaveearly")) // 将早退转换为迟到,统一处理 v[i] = "late"; if (v[i].equals("absent")) // 计算缺勤次数 cnt_absent++; // 检查连续迟到的情况 if (i >= 1 && v[i].equals("late") && v[i-1].equals("late")) f = false; // 如果有连续的迟到,设置f为false // 检查任意连续7次考勤的规则 if (i >= 6) { int cnt_present = 0; // 统计7次考勤中的正常上班次数 for (int j = 0; j < 7; j++) // 计算从当前考勤向前数的7次考勤 cnt_present += v[i-j].equals("present") ? 1 : 0; if (cnt_present < 4) // 如果正常上班次数少于4,即不良记录超过3次 f = false; // 设置f为false } } // 检查总缺勤次数
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
华为OD机试题库2024年 文章被收录于专栏
2024年OD统一考试(D卷),最新最完整题库。 收录130+道真题,提供解题思路,Java/Python/C++三种答案源码。