华为2019秋招笔试Java实现(6)

这篇博客介绍了华为2019年秋季招聘笔试中的一道Java题目,讨论如何解决通讯软件中消息在群组间扩散的问题。博主通过广度优先搜索策略分析并给出了解决方案,旨在帮助读者理解和解决类似问题。
摘要由CSDN通过智能技术生成

华为2019秋招笔试Java实现(6)

笔试日期2019年8月21日

第三题(300分)

题目描述

在通讯软件中,在群里面转发消息可以使得一条消息扩散到很多人那里。假设已知有m个群,其中一个人把消息发到他自己所在的所有群里面,这些群里面的每个人又把消息再次转发到他所有的群里面,请问所有群的人都转发过一次后,最后几个人收到该消息(包括发消息的人)?输出收到消息的人数(以十进制整数输出,不需要加换行符)。

输入描述

发第一条消息的人名

群组个数m

群组1成员人名列表

群组2成员人名列表

群组m成员人名列表

人名是英文字符串,包含字母和空格,最大长度不超过100字符。

群组成员人名列表包含1至多个人名,两个人名之间以逗号分隔。

输出描述

以十进制输出最后能收到消息的人数。

包括第一个发消息的人也统计进去,重复接收到消息只统计一次。

示例

输入

Jack
3
Jack,Tom,Anny,Lucy
Tom,Danny
Jack,Lily

输出

6

分析

这一题可以认为是广度优先问题,即从开始的群出发,找到可以到达的所有群。

起点:开始的人可以确定起始的群(一个、多个或没有出发点)

传递:从一开始的群传递到下一波群,直到没有新的群加入传递(传递条件是群之间有相同的人)

目标:被传递的所有群合并在一起,按名字计数

总的来说这题难度不大,并不涉及复杂的算法,只要识别出问题类型,剩下的就是熟练度的问题了。

解答

import java.util.*;

public class Main3 {
   
    public static void main(String[] args) {
   
        Scanner sc = new Scanner(System.in);
        String start = sc.next();
        int n = sc.nextInt();
        sc.nextLine()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值