目录
- 专栏导读
- 一、题目描述
- 二、输入描述
- 三、输出描述
- 四、解题思路
- 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 实现【路灯照明问题】【2022Q4 100分】,感谢fly晨发现这个问题,并提供更优质的算法
🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。