2023 华为笔试题 0823
笔试时间:2023年8月23日 秋招
第一题
题目:获取连通的相邻节点列表
在网元内,存在了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
数据间有空格隔开,分别表示:节点A有M个端口,各个端口所属的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
数据间有空格隔开,分别表示: 节点x的TBx,有Mx个端口,各个端口所属的VLAN_ID,即后面VLAN_ID_xm表示第m个端口的VLAN ID。
其中,网元内节点TB的取值范围为(0,4294967295);
输出描述
第1行:N
表示与节点A连通的相邻节点个数,如 N为0,则无需在输出其他信息
第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
解释:TB为1025的节点,其端口与节点A的端口均不在一个VLAN内,故与节点A不连通
TB为1024和1023的节点,均有端口与节点A的端口在VLAN ID为1的VLAN内,故与节点A连通
参考题解
哈希表
C++:
#include <iostream> #include <vector> #include <set> #include <algorithm> using namespace std; int main() { 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 (long long l = 0; l < Mx; l++) { long long VLAND; cin >> VLAND; if (s.count(VLAND) > 0) { flag = true; } } if (flag) { nodes.push_back(TB); } } sort(nodes.begin(), nodes.end()); if (!nodes.empty()) { cout << nodes.size() << endl; for (long long re : nodes) { cout << re << " "; } } else { cout << 0 << endl; } return 0; }
Java:
import java.io.*; import java.util.*; public class Main{ static PrintWriter print = new PrintWriter(new OutputStreamWriter(System.out)); static FastScanner in = new FastScanner(System.in); public static void main(String[] args) { Set<Long> set = new HashSet<>(); int M = in.nextInt(); for (int i = 0; i < M; i++) { long a = in.nextLong(); set.add(a); } int N = sc.nextInt(); List<Long> nodes = new ArrayList<>(); for (int i = 0; i < N; i++) { long TB = in.nextLong(); long Mx = in.nextLong(); boolean flag = false; for (long l = 0; l < Mx; l++) { long VLAND = in.nextLong(); if (set.contains(VLAND)) { flag = true; } } if (flag) nodes.add(TB); } Collections.sort(nodes); if (nodes.size() > 0) { print.println(nodes.size()); for (Long re : nodes) { print.print(re + " "); } } else print.println(0); print.flush(); } private static class FastScanner { BufferedReader br; StringTokenizer st; public FastScanner(InputStream stream){ br = new BufferedReader(new InputStreamReader(stream), 32768); st = null; } String next() { while (st == null || !st.hasMoreTokens()) try { st=new StringTokenizer(br.readLine()); } catch (IOException e) { e.printStackTrace(); } return st.nextToken(); } int nextInt() { return Integer.parseInt(next()); } int[] readArray(int n) { int[] a=new int[n]; for (int i=0; i<n; i++) a[i]=nextInt(); return a; } long nextLong() { return Long.parseLong(next()); } double nextDouble(){return Double.parseDouble(next());} } }
Python:
M = int(input()) s = set(map(int, input().split())) N = int(input()) nodes = [] for i in range(N): TB, Mx = map(int, input().split()) flag = False for _ in range(Mx): VLAND = int(input()) if VLAND in s: flag = True if flag: nodes.append(TB) nodes.sort() if nodes: print(len(nodes)) print(*nodes) else: pr
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
2023秋招各大笔试题汇总,c++,java,python多种语言分析,解答。