题目
对一个数据a进行分类,分类方法为:此数据a (四个字节大小)的四个字节相加对一个给定的值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
输出
3
说明
10个数据4个字节相加后的结果分别为1 2 3 4 5 6 7 8 9 10,
故对4取模的结果为1 2 3 0 1 2 3 0 1 2,c为3,所以0 1 2都是有效类型,类型为1和2的有3个数据,类型为0的只有2个数据,故输出3。
示例2 输入输出示例仅供调试,后台判题数据一般不包含示例
输入
1 4 256 257 258 259 260 261 262 263 264 265
输出
2
说明
10个数据4个字节相加后的结果分别为1 2 3 4 5 6 7 8 9 10,
故对4取模的结果为1 2 3 0 1 2 3 0 1 2, c为1,
所以只有0是有效类型,类型为0的有2个数据,故输出2。
思路
此题关键在于对于给定整数,怎么求四字节的和?
比如任意整数a:
00001000 0000110 0010001 00010010
求a第一个字节(从右往左):a&0xff
求a第二个字节:a>>8 & 0xff
求a第三个字节:a>>16 & 0xff
求a第四个字节:a>>24 & 0xff
这点想通后,根据题目描述写剩余逻辑即可。
题解
package hwod;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class DataCategory {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int c = sc.nextInt();
int b = sc.nextInt();
int[] nums = new int[10];
for (int i = 0; i < 10; i++) {
nums[i] = sc.nextInt();
}
System.out.println(dataCategory(nums, c, b));
}
private static int dataCategory(int[] nums, int c, int b) {
int[] new_nums = Arrays.stream(nums)
.map(DataCategory::getDealNum)
.map(x -> x % b)
.filter(x -> x < c)
.toArray();
Map<Integer, Integer> map = new HashMap<>();
int ans = 0;
for (int num : new_nums) {
int val = map.getOrDefault(num, 0) + 1;
map.put(num, val);
ans = Math.max(ans, val);
}
return ans;
}
//返回四个字节相加和
private static int getDealNum(int n) {
int ans = 0;
int b = 0xff;
for (int i = 0; i < 4; i++) {
ans += n >> (8 * i) & b;
}
return ans;
}
}
推荐
如果你对本系列的其他题目感兴趣,可以参考华为OD机试真题及题解(JAVA),查看当前专栏更新的所有题目。
说明
本专栏所有文章均为原创,欢迎转载,请注明文章出处:https://blog.csdn.net/qq_31076523/article/details/134176793。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。