深圳外贸网站建设服务哪家好常平镇网站建设公司
深圳外贸网站建设服务哪家好,常平镇网站建设公司,公司网站搜索优化,洛阳房产网目录 专栏导读一、题目描述二、输入描述三、输出描述1、输入2、输出3、说明 四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2024C卷题库疯狂收录中#xff0c;刷题点这里 专栏导读
本专栏收录于《华为OD机试#xff08;JAVA#xff09;真题刷题点这里 专栏导读
本专栏收录于《华为OD机试JAVA真题A卷B卷C卷》。
刷的越多抽中的概率越大每一题都有详细的答题思路、详细的代码注释、样例测试发现新题目随时更新全天CSDN在线答疑。
一、题目描述
大众对垃圾短信深恶痛绝希望能对垃圾短信发送者进行识别为此很多软件增加 了垃圾短信识别机制。经分析发现正常用户的短信通常具备交互性而垃圾短信往 往都是大量单向的短信按照如下规则进行垃圾短信识别
本题中发送者A符合以下条件之一的则认为A是垃圾短信发送者
① A 发送短信的接收者中没有发过短信给A的人数 L 5 ② A 发送的短信数 - A接收的短信数 M 10 ③ 如果存在 XA 发送给 X 的短信数 - A 接收到X的短信数N 5。
二、输入描述
第一行为条目数目接下来几行是具体的条目每个条目是一对ID第一个数字是发送者ID后面的数字是接收者ID中间空格隔开所有的ID都为无符号整型ID最大值为100
同一个条目中两个ID不会相同即不会自己给自己发消息
最后一行为指定的ID。
三、输出描述
输出该ID是否为垃圾短信发送者是输出 true否则输出 false并且按序列输出L、M的值由于N值不唯一不需要输出 输出均为宇符串。
1、输入
8 1 2 1 3 1 4 1 5 1 6 6 1 5 2 6 3 1
2、输出
false 4 1
3、说明
输出该ID是否为垃圾短信发送者是输出 true否则输出 false并且按序列输出L、M的值没有发过短信给A的人数LA接收的短信数 M。
没有发过短信给A的人数L为4A接收的短信数 M为1。
四、解题思路
此题还是很简单的根据题意解析即可。
定义没有发过短信给A的人数L、A接收的短信数 M、A 发送给 X 的短信数X、A 接收到X的短信数N遍历A发送的短信关系aToList获取接收A短信的用户的短信发送信息如果未给A发送则没有发过短信给A的人数L否则A接收的短信数 M获取A 发送给 X 的短信数X、A 接收到X的短信数N如果存在 XA 发送给 X 的短信数 - A 接收到X的短信数N 5则视为垃圾短信发送者输出true不再计算N值根据①、②、③判断条件判断是否为垃圾短信发送者满足一个即为垃圾短信发送者 A 发送短信的接收者中没有发过短信给A的人数 L 5A 发送的短信数 - A接收的短信数 M 10如果存在 XA 发送给 X 的短信数 - A 接收到X的短信数N 5 输出该ID是否为垃圾短信发送者是输出 true否则输出 false并且按序列输出L、M的值。
五、Java算法源码
public static void main(String[] args) {Scanner sc new Scanner(System.in);int n Integer.valueOf(sc.nextLine());MapInteger, ListInteger map new HashMap();for (int i 0; i n; i) {int[] arr Arrays.stream(sc.nextLine().split( )).mapToInt(Integer::parseInt).toArray();ListInteger list map.getOrDefault(arr[0], new ArrayList());list.add(arr[1]);map.put(arr[0], list);}Integer A Integer.valueOf(sc.nextLine());ListInteger aToList map.get(A);// 1. A 发送短信的接收者中没有发过短信给A的人数 L 5// 没有发过短信给A的人数int L 0;// A接收的短信数 Mint M 0;// A 发送给 X 的短信数int X 0;// A 接收到X的短信数Nint N 0;// 3.如果存在 XA 发送给 X 的短信数 - A 接收到X的短信数N 5boolean flag false;for (Integer num : aToList) {ListInteger toAList map.getOrDefault(num, new ArrayList());if (!toAList.contains(A)) {L;} else {M;// 3.如果存在 XA 发送给 X 的短信数 - A 接收到X的短信数N 5if(!flag){// A 发送给 X 的短信数X Collections.frequency(aToList, num);// A 接收到X的短信数NN Collections.frequency(toAList, A);if(X - N 5){flag true;}}}}// 2. A 发送的短信数 - A接收的短信数 M 10// A 发送的短信数int aSend aToList.size();// 没有发过短信给A的人数LA接收的短信数 MStringBuilder builder new StringBuilder();if (L 5 || aSend - M 10 || flag) {builder.append(true).append( ).append(L).append( ).append(M);}else{builder.append(false).append( ).append(L).append( ).append(M);}System.out.println(builder);
}六、效果展示
1、输入
12 1 2 1 3 1 4 1 5 1 6 1 7 1 8 6 1 7 1 8 1 5 2 6 3 1
2、输出
false 4 3
3、说明
输出该ID是否为垃圾短信发送者是输出 true否则输出 false并且按序列输出L、M的值没有发过短信给A的人数LA接收的短信数 M。
没有发过短信给A的人数L为4A接收的短信数 M为3。 下一篇华为OD机试 - 最长的顺子 - 感谢禁止你发言提供的更简便算法Java 2023 B卷 200分
本文收录于华为OD机试JAVA真题A卷B卷C卷
刷的越多抽中的概率越大每一题都有详细的答题思路、详细的代码注释、样例测试发现新题目随时更新全天CSDN在线答疑。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/89777.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!