目录
- 专栏导读
- 一、题目描述
- 二、输入描述
- 三、输出描述
- 四、解题思路
- 1、报文回路
- 2、异常情况:
- 3、解题思路
- 五、Java算法源码
- 六、效果展示
- 1、输入
- 2、输出
华为OD机试 2023B卷题库疯狂收录中,刷题点这里
专栏导读
本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。
一、题目描述
IGMP协议中响应报文和查询报文,是维系组播通路的两个重要报文,在一条已经建立的组播通路中两个相邻的host和router,router会给host发送查询报文,host收到查询报文后,给router回复一个响应报文,以维持之间的关系,一旦关系断裂,那么这条组播通路就异常了。
现通过某种手段,抓取到了host和router两者通讯的所有响应报文和查询报文,请分析该组播通路是否正常。
二、输入描述
第一行抓到的报文数量C(C <= 100),后续C行依次输入设备节点D1和D2,表示从D1到D2发送了单向的报文,D1和D2用空格隔开。
三、输出描述
组播通路是否正常,正常输出true,异常输出false。
四、解题思路
分析以下题意:
router会给host发送查询报文,host收到查询报文后,给router回复一个响应报文,一旦关系断裂就异常了。
大白话就是,我给你了,你也得给我,你不给我,咱俩就闹掰了,俗称“礼尚往来”。
1、报文回路
礼尚往来,返回true
2、异常情况:
D2和D3眉来眼去,完全不顾及D1的真心付出,返回false,断绝关系。
3、解题思路
- 输入报文数量C;
- 定义map,存储关系,
“key:router发起者,value:router发起者的多个host接受者
; - 后续C行依次输入设备节点D1和D2,加入到map中;
- 遍历关系集合,获取router发起者;
- 获取router发起者的多个host接受者;
- 获取“host接受者”的host接受者,比较是否“礼尚往来”
- 我给你了,你没还我,直接断绝关系,返回false;
- 礼尚往来,和和美美一家人,返回true;
五、Java算法源码
package com.guor.od;import java.util.*;public class OdTest01 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);// 报文数量Cint C = Integer.valueOf(sc.nextLine());/*** key:router发起者* value:router发起者的多个host接受者*/Map<String, HashSet<String>> map = new HashMap<>();// 后续C行依次输入设备节点D1和D2for (int i = 0; i < C; i++) {String[] arr = sc.nextLine().split(" ");// 发送查询报文String router = arr[0];// 发送响应报文String host = arr[1];map.putIfAbsent(router, new HashSet<>());map.putIfAbsent(host, new HashSet<>());map.get(router).add(host);}// 遍历关系集合,获取router发起者for (String send : map.keySet()) {// 获取router发起者的多个host接受者for (String receive : map.get(send)) {/*** 获取“host接受者”的host接受者,比较是否“礼尚往来”* 我给你了,你没还我,直接断绝关系,返回false*/if (!map.get(receive).contains(send)) {System.out.println("fasle");return;}}}// 礼尚往来,和和美美一家人System.out.println("true");}
}
六、效果展示
1、输入
4
D1 D2
D2 D3
D3 D2
D2 D1
2、输出
礼尚往来,返回true
🏆下一篇:华为OD机试真题 Java 实现【路灯照明问题】【2022Q4 100分】,感谢fly晨发现这个问题,并提供更优质的算法
🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。