华为OD机试:27 异常的打卡记录

package a_od_test;

import java.util.ArrayList;
import java.util.Scanner;

/*
异常的打卡记录
知识点数组亨符串哈肴Q表循环
时间限制:1S空间限制:256MB限走语言:不限
题目描述:
考勤记录是分析和考核职工工作时间利用情况的原始依据,也是计算职工工资的原始
依据,为了正确地计算职工工资和监督工资基金使用情况,公司决定对员工的手机打
卡记录进行异常排查。
如果出现以下两种情况,则认为打卡异常:
1、 实际设备号与注册设备号不一样
2、 或者,同一个员工的两个打卡记录的时间小于60分钟并且打卡距离超过5km。
给定打卡记录的宇符串数组clockRecords (每个打卡记录组成为:工号;时间(分
钟);打卡距离(km);实际设备号;注册设备号),返回其中异常的打卡记录(按输
入顺序输出)。
输入描述:
第一行输入为N,表示打卡记录数;
之后的N行为打卡记录,每一行为一条打卡记录。
例如:
2
100000,10,1,ABCD,ABCD
100000,50,10,ABCD,ABCD
输出描述:
输出为异常的打卡记录,例如:100000,10,1,ABCD,ABCD;100000ᵣ50,10,ABCD,ABCD
补充说明:
1, clockRecords^lg<=1000;
2 、 clockRecords[i]格 式          {id},{time},{distance},{actualDeviceNumber},{registeredDeviceNumber}
3、 id由6位数宇组成;
4. time由整数组成,范围为0-1000;
5. distance由整数组成,范围为0*100;
6、 actualDeviceNumberWregisteredDeviceNumber^四位大写宇母组成。
示例1
输入:
2
100000,10,1,ABCD,ABCD
100000,50,10,ABCD,ABCD
输出:
100000,10,1,ABCD,ABCD;100000,50,10,ABCD,ABCD
说明:
第一条记录是异常的,因为第二条记录与它的间隔不超过60分钟但是打卡距离超过了5km,同理
第二条记录也是异常的。
示例2
输入:
2
100000,10,1,ABCD,ABCD
100000,80,10,ABCE,ABCD
输出:
100000,80,10,ABCE,ABCD
说明:
第二条记录的注册设备号与打卡设备号不一致,所以是异當记录
示例3
输入:
2
100000,10,1,ABCD,ABCD
100001,80,10,ABCE,ABCE
输出:
null
说明:
无异常打卡记录,所以返回null
解题思路:
  1. 新建一个类来放置员工的打卡记录
  2. 遍历所有的打卡记录;
     1-当注册设备号和打卡设备号不一致的时候直接异常(先判断这个)
     2.或者两个打卡记录的时问小于60分钟并且打卡距离超过5km直接异常
 */
public class Main27 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num = Integer.parseInt(sc.nextLine());
        ArrayList<Record> list = new ArrayList<Record>();
        ArrayList<Record> result = new ArrayList<Record>();
        for (int i = 0; i < num; i++) {
            String[] line = sc.nextLine().split(",");
            Record record = new Record(Integer.parseInt(line[0]), Integer.parseInt(line[1]), Integer.parseInt(line[2]), line[3], line[4]);
            list.add(record);
        }

        for (int i = 0; i < list.size(); i++) {
            Record record1 = list.get(i);
            //1、 实际设备号与注册设备号不一样
            if (!record1.actualDeviceNumber.equals(record1.registeredDeviceNumber)) {
                result.add(record1);
                continue;
            }
            //2、 或者,同一个员工的两个打卡记录的时间小于60分钟并且打卡距离超过5km。
            for (int j = i + 1; j < list.size(); j++) {
                Record record2 = list.get(j);
                int diffTime = Math.abs(record2.time - record1.time);
                int diffDistance = Math.abs(record2.distance - record1.distance);
                if (diffTime < 60 && diffDistance > 5) {
                    result.add(record1);
                    result.add(record2);
                    break;
                }
            }
        }

        if (result.size() == 0) {
            System.out.println("null");
        } else {
            String temp = result.toString().replace("[", "").replace("]", "").replace(";,", ";").replace(" ", "");
            System.out.println(temp.substring(0, temp.length() - 1));
        }
    }
}

// clockRecords格 式  {id},{time},{distance},{actualDeviceNumber},{registeredDeviceNumber}
class Record {
    int id;
    int time;
    int distance;
    String actualDeviceNumber;
    String registeredDeviceNumber;

    public Record(int id, int time, int distance, String actualDeviceNumber, String registeredDeviceNumber) {
        this.id = id;
        this.time = time;
        this.distance = distance;
        this.actualDeviceNumber = actualDeviceNumber;
        this.registeredDeviceNumber = registeredDeviceNumber;
    }

    @Override
    public String toString() {
        return id + "," + time + "," + distance + "," + actualDeviceNumber + "," + registeredDeviceNumber + ";";
    }
}
  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
华为2023年的OD机试题目包含多个部分,其中有一个是“异常打卡Java”,是一道Java编程题目。 题目要求程序实现一个打卡系统,包含登录、签到、签退、查询历史记录等功能。要求使用Java语言编写,同时需要对程序中可能出现的异常进行处理,确保程序的稳定性和安全性。 对于这道题目,我们可以从以下几个方面进行思考和实现: 第一,需要使用Java语言编写程序,其中涉及到Java基础语法、数据类型、运算符、流程控制等知识点。需要熟悉Java编程语言的基本规则和开发环境,如JDK、Eclipse等。 第二,需要实现一个打卡系统,包括用户登录、签到、签退、查询历史记录等功能。这需要用到Java的面向对象编程思想,通过定义类、对象、方法等来实现系统的功能。 第三,需要对程序中可能出现的异常进行处理,通过try-catch语句等方式来捕获异常,并进行相应的处理。需要能够识别和处理常见的异常类型,如空指针异常、数组越界异常等。 在实现上述功能的同时,还需要考虑程序的稳定性和安全性,例如防止SQL注入、XSS攻击等安全问题。需要注意代码实现的效率和可读性,注重代码规范和注释,以便后续维护和更新。 总之,在华为OD2023机试中的异常打卡Java这一题目中,我们需要综合运用Java编程知识和面向对象思想,能够处理程序中可能发生的异常,确保程序的稳定性和安全性。需要注重代码防御和安全性,同时需要考虑代码的可读性和规范性。这是一道具有一定难度和挑战性的Java编程题目,但通过认真学习和练习,相信大家可以取得好的成绩。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值