2022华为机试真题 C++ 实现事件推送
Posted MISAYAONE
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2022华为机试真题 C++ 实现事件推送相关的知识,希望对你有一定的参考价值。
目录
题目
【事件推送】
同一个数轴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
// Online C++ compiler to run C++ program online
#include<iostream>
#include<vector>
#include<algorithm>
#include<iomanip>
using namespace std;
int main()
int m;
int n;
int R;
cin >> m >> n >> R;
// 每个数组的坐标
vector<int> a_array ;
while (m)
m--;
int elemnt;
cin >> elemnt;
a_array.push_back(elemnt);
vector<int> b_array ;
while (n)
n--;
int elemnt;
cin >> elemnt;
b_array.push_back(elemnt);
for (int i=0;i<a_array.size();i++)
for (int j=0;j<b_array.size();j++)
//满足条件 1 和 2
if (a_array[i] <= b_array[j] && b_array[j] - a_array[i] < R)
cout<< a_array[i] << " " << b_array[j] << endl;
// 满足条件3, 直接跳出当前循环
break;
return 0;
以上是关于2022华为机试真题 C++ 实现事件推送的主要内容,如果未能解决你的问题,请参考以下文章