专栏导读
本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。
一、题目描述
1、问题
数轴×有两个点的序列A={A1,A2,…Am}和B={B1,B2,.Bn},A和Bj均为正整数,A、B已经从小到大排好序,A、B均肯定不为空,给定一个距离R(正整数),列出同时满足如下条件的所有(Ai,Bj)数对
2、条件
- Ai <= Bj
- Ai,Bj 距离小于等于 R,但如果Ai 找不到R范围内的Bj,则列出距它最近的1个Bj,当然此种情况仍然要满足1),但如果仍然找不到,就丢弃Ai
3、原型
车路协同场景,一条路上发生了有很多事件(A),要通过很多路测设备(B)广播给路上的车,需要给每个事件找到一个合适的路测设备去发送广播消息。
二、输入描述
按照人易读的格式输入一行数据,参见输入样例,其中“ABR={,}”中的每个字符都是关键分割符,输入中无空格,其他均为任意正整数,输入A和B已经排好序,A和B的大小不超过50,正整数范围不会超过65535。
三、输出描述
(Ai,Bj)数对序列,排列顺序满足序列中前面的Ax<=后面的Ay,前面的 Bx<=后面的By,因为输入A和B已经排好序,所以实际上输出结果不用特意排序,排序不是考察点。
四、Java算法源码
感谢@undefined提供更优质算法
package com.guor.od;
import java.util.*;
public class OdTest01 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] arrA = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
int[] arrB = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
int R = Integer.valueOf(sc.nextLine());
for (int a : arrA) {
int near = -1;
boolean flag = false;
for (int b : arrB) {
if (b - a <= R && b >= a) {
System.out.print("(" + a + "," + b + ")");
flag = true;
}
if (b - a > R) {
near = b;
break;
}
}
if (flag == false && near != -1) {
System.out.print("(" + a + "," + near + ")");
}
}
}
}
五、效果展示
1、输入
1 3 5
2 4 6
2
2、输出
(1,2)(3,4)(5,6)
🏆下一篇:华为OD机试真题 Java 实现【简易内存池】【2023 B卷 200分 考生抽中题】
🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。