2022华为机试真题 C++ 实现事件推送

Posted MISAYAONE

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2022华为机试真题 C++ 实现事件推送相关的知识,希望对你有一定的参考价值。

目录

题目

思路

考点

Code

题目

【事件推送】

同一个数轴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++ 实现事件推送的主要内容,如果未能解决你的问题,请参考以下文章

2022华为机试真题 C++ 实现单词重量

2022华为机试真题 C++ 实现最长子字符串的长度

2022华为机试真题 C++ 实现快递运输

2022华为机试真题 C++ 实现快速人名查找

2022华为机试真题 C++ 实现求字符串中所有整数的最小和

华为机试(C++)真题Od