华为嵌入式软件开发工程师笔试 8-23

《嵌入式软件开发笔试与面试手册》https://blog.nowcoder.net/zhuanlan/jvN8gj

《软件开发笔试汇总》https://blog.nowcoder.net/zhuanlan/0oDWVm

获取连通的相邻节点列表

在网元内,存在了N个转发节点,每个转发节点有自己唯一的标识TB且每个节点有M个端口,节点间通过端口进行报文通讯。出于业务隔离的需求,服务器内的端口被划分为多个通讯平面(VLAN隔离,每个VLAN都有一个VLAN ID作为标识)

1、如果两个端口的VLAN ID相同,则说明这两个端口处于同个VLAN,且处于连通状态;

2、如果两个端口的VLANID不同,则说明这两个端口处于不同VLAN,彼此不连通;

现给出节点A的端口数及其各端口所属的VLAN ID,以及节点A相邻的其他节点和端口信息。

要求获取与节点A处于连通状态的所有相邻节点的TB列表(按TB从小到大顺序输出)

1:M VLAN_ID_1...VLAN_ID_m

数据间有空格隔开,分别表示:节点AM个端口,各个端口所属的VLAN_ID,即后面VLAN_ID_m表示第m个端口的VLAN ID

其中,网元内节点的端口数量M的取值范围为[1,4];端口划分VLAN ID的取值范围为[1,4];

2:N

表示与节点A相邻的其他节点有N个,N的取值范围为[0,4000)

3行开始,将有N行数据,分别描述与节点A相邻的节点的TB和端口信息

输入格式为:TBx Mx VLAN_ID_xx...VLAN_ID_xm

数据间有空格隔开,分别表示: 节点xTBx,有Mx个端口,各个端口所属的VLAN_ID,即后面VLAN_ID_xm表示第m个端口的VLAN ID

其中,网元内节点TB的取值范围为(0,4294967295);

1:N

表示与节点A连通的相邻节点个数,如 N0,则无需在输出其他信息

2:TB_1...TB_n

数据间有空格隔开,分别表示:与节点A连通的相邻节点的TB,个数为N,按从小到大的顺序输出。

1 1 3 1024 2 1 2 1023 1 1 1025 3 2 2 3

2 1023 1024

#include <iostream>
#include <vector>
#include <set>
#include <algorithm>

using namespace std;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    set<long long> s;
    int M;
    cin >> M;
    for (int i = 0; i < M; i++) {
        long long a;
        cin >> a;
        s.insert(a);
    }

    int N;
    cin >> N;
    vector<long long> nodes;
    for (int i = 0; i < N; i++) {
        long long TB, Mx;
        cin >> TB >> Mx;
        bool flag = false;
        for (int j = 0; j < Mx; j++) {
            long long VLAND;
            cin >> VLAND;
            if (s.find(VLAND) != s.end()) {
                flag = true;
            }
        }
        if (flag) nodes.push_back(TB);
    }

    sort(nodes.begin(), nodes.end());

    if (!nodes.empty()) {
        cout << nodes.size() << "\n";
        for (long long re : nodes) {
            cout << re << " ";
        }
    }
    else {
        cout << 0 << "\n";
    }

    return 0;
}

字符串处理器

产品代码需要设计一个带游标的字符串处理器,它需要实现以下功能:

插入:在游标所在处添加文本,其对应操作为insert str,insert表示插入操作命令关键字 (区分大小写)str表示待操作的字符串,insert操作执行后将str拼接到游标当前位置,同时游标移动到str的右边;

删除:在游标所在处删除文本,其对应操作为delete lendelete表示删除操作命令关键字(区分大小写)len为整数,表示删除游标左边字符串的长度,此时len要求大于等于0,如果len小于或len大于字符串长度,认为输入命名非法,不做任何处理;

移动:将游标往左或者往右移动,其对应操move cntmove表示游标移动操作命令关键字(区分大小写)cnt为整数,表示游标移动次数,cnt如果为负数时表示向左移动cnt次,如果为正数表示向右移动cnt次数,如果cnt等于0,则表示游标不移动,如果移动次数cnt超过字符串左右边界则认为输入命名非法,不做任何处理:

复制:将游标左边字符串复制并插入到游标的右边,游标位置不变(如果游标右边有字符,复制插入到游标和原有字符中间),其对应操作为copycopy表示复制操作命令关键字(区分大小写):

时间限制: C/C++ 1000ms,其他语言: 2000ms内存限制: C/C++256MB,其他语言: 512MB

支持输入多行,每个仅支持输入一个操作命令,当输入end结束操作命令关键字(区分大小写)时则代表操作停止。

首次执行时字符串处01

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

本专栏主要发布嵌入式软件开发相关岗位的笔试真题(嵌入式软件开发、通用软件开发、C/C++软件开发、算法工程师、数据开发、测试开发等)主要是算法编程题,其中一些岗位笔试含有对应的选择题、填空题、简单题。

全部评论

相关推荐

3 28 评论
分享
牛客网
牛客企业服务