华为机试真题 Java 实现事件推送
Posted MISAYAONE
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了华为机试真题 Java 实现事件推送相关的知识,希望对你有一定的参考价值。
目录
题目
【事件推送】
同一个数轴X上有两个点的集合A=A1, A2, …, Am和B=B1, B2, …, Bn,Ai和Bj均为正整数,A、B已经按照从小到大排好序,
A、B均不为空,给定一个距离R(正整数),列出同时满足如下条件的所有(Ai, Bj)数对…
1) Ai<= Bj
2) Ai, Bj之间的距离小于等于R
3) 在满足1) 2)的情况下,每个Ai只需输出距离最近的Bj
4) 输出结果按Ai从小到大的顺序排序输入描述
第一行三个正整数m,n,R
第二行m个正整数,表示集合A
第三行n个正整数,表示集合B
输入限制
1<=R<=100000, 1<=n,m<=100000, 1<=Ai,Bj<=1000000000
输出描述
每组数对输出一行Ai和Bj,以空格隔开
示例1 输入输出示例仅供调试,后台判题数据一般不包含示例
输入
4 5 5
1 5 5 10
1 3 8 8 20输出
1 1
5 8
5 8
思路
1:虽然有4个条件需要满足,但是每个条件其实都非常好满足,在逻辑实现的情况下,直接循环遍历两个数组,在循环中判定各项条件即可。
2:第四个条件几乎是迷惑项,因为本身两个数组排好序了,循环后直接是从小到大的。
考点
1:条件判定
2:注重理解题意
Code
import java.util.Scanner;
import java.util.*;
public class Main
public static void main(String[] args)
// 处理输入
Scanner in = new Scanner(System.in);
String param_str = in.nextLine();
String m_str = in.nextLine();
String n_str = in.nextLine();
String[] param_list = param_str.split(" ");
int R = Integer.valueOf(param_list[2]);
String[] m_List = m_str.split(" ");
String[] n_List = n_str.split(" ");
int index = 0;
//双层循环判定
for (int i = 0; i < m_List.length; i++)
if (m_List[i].trim().length() <= 0)
continue;
int m_temp = Integer.valueOf(m_List[i]);
for (int j = index; j < n_List.length; j++)
index = j;
if (n_List[j].trim().length() <= 0)
continue;
int n_temp = Integer.valueOf(n_List[j]);
if (m_temp <= n_temp)
if (n_temp - m_temp <= R)
System.out.println(m_temp + " " + n_temp);
break;
以上是关于华为机试真题 Java 实现事件推送的主要内容,如果未能解决你的问题,请参考以下文章
华为OD机试真题Python实现最近的点真题+解题思路+代码(2022&2023)