华为OD机试真题 Java 实现【数据分类】【2023 B卷 100分】,附详细解题思路

在这里插入图片描述

目录

    • 专栏导读
    • 一、题目描述
    • 二、输入描述
    • 三、输出描述
    • 四、解题思路
      • 1、输入
      • 2、输出
      • 3、解题思路
    • 五、Java算法源码
    • 六、效果展示
      • 1、输入
      • 2、输出

华为OD机试 2023B卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

一、题目描述

对一个数据a进行分类,分类方法是,此数据a(4个字节大小)的4个字节相加对一个给定值b取模。

如果得到的结果小于一个给定的值c则数据a为有效类型,其类型为取模的值。

如果得到的结果大于或者等于c则数据a为无效类型。

比如一个数据a = 0x01010101,b = 3,按照分类方法计算:(0x01 + 0x01 + 0x01 + 0x01) % 3 = 1。

所以如果c等于2,则此a就是有效类型,其类型为1;如果c等于1,则此a是无效类型。

又比如一个数据a = 0x01010103,b = 3,按分类方法计算:(0x01 + 0x01 + 0x01 + 0x03) % 3 = 0。

所以如果c = 2则此a就是有效类型,其类型为0,如果c = 0则此a是无效类型。

输入12个数据,第一个数据为c,第二个数据为b,剩余10个数据为需要分类的数据。

请找到有效类型中包含数据最多的类型,并输出该类型含有多少个数据。

二、输入描述

输入12个数据用空格分割,第一个数据为c,第二个数据为b,剩余10个数据为需要分类的数据。

三、输出描述

请找到有效类型中包含数据最多的类型,并输出该类型含有多少个数据。

四、解题思路

1、输入

3 4 256 257 258 259 260 261 262 263 264 265

2、输出

3

3、解题思路

示例中 第三个256可以用4字节表示,具体表示方法如下:

将256转换成二进制数,得到 100000000

由于4字节等于32位,因此将上述二进制数左侧补充24个0,

得到00000000 00000000 00000001 00000000

将上述二进制数每8位分为一组,分别转换成十进制数,得到 0、0、1、0

将上述4个十进制数相加取模得到1。

五、Java算法源码

package com.guor.od;

import java.util.*;

public class OdTest {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int[] input = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();

        int[] a = new int[10];
        int c = input[0];
        int b = input[1];
        for (int i = 0; i < 10; i++) {
            a[i] = input[i+2];
        }

        Map<Integer, Integer> data_map = new HashMap<>();
        for (int i = 0; i < 10; i++) {
            int s = 0;
            while (a[i] > 0) {
                s += a[i] % 256;
                a[i] /= 256;
            }
            s %= b;
            if (s < c) {
                data_map.put(s, data_map.getOrDefault(s, 0) + 1);
            }
        }
        int result = 0;
        for (int value : data_map.values()) {
            result = Math.max(result, value);
        }
        System.out.println(result);
    }
}

六、效果展示

1、输入

3 4 256 257 258 259 260 261 262 263 264 265

2、输出

3

华为OD机试真题 Java 实现【数据分类】【2023 B卷 100分】,附详细解题思路_第1张图片


下一篇:华为OD机试真题 Java 实现【路灯照明问题】【2022Q4 100分】,感谢fly晨发现这个问题,并提供更优质的算法

本文收录于,华为OD机试(JAVA)真题(A卷+B卷)

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

你可能感兴趣的:(搬砖工逆袭Java架构师,华为od,java,游戏,程序人生,开发语言)