题目描述
对一个数据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个数据为需要分类的数据。
输出描述
输出最多数据的有效类型有多少个数据。
用例
输入 | 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。 |
输入 | 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。 |
题目解析
逻辑题,按照题目意思写过程即可。
JavaScript算法源码
/* JavaScript Node ACM模式 控制台输入获取 */
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
rl.on("line", (line) => {
let arr = line.split(" ");
const c = arr.shift() - 0;
const b = arr.shift() - 0;
console.log(getResult(arr, c, b));
});
function getResult(arr, c, b) {
const count = {};
arr
.map((a) => {
let str = Number(a).toString(16);
if (str.length % 2 !== 0) {
str = "0" + str;
}
let sum = 0;
for (let i = 0; i < str.length - 1; i += 2) {
sum += parseInt(str.slice(i, i + 2), 16);
}
const type = sum % b;
if (type < c) {
return type;
} else {
return -1;
}
})
.forEach((type) => {
if (type !== -1) {
count[type] ? count[type]++ : (count[type] = 1);
}
});
return Object.values(count).sort((a, b) => b - a)[0];
}
Java算法源码
import java.util.Arrays;
import java.util.HashMap;
import java.util.Scanner;
public class Main {
// 输入获取
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int c = sc.nextInt();
int b = sc.nextInt();
int[] arr = new int[10];
for (int i = 0; i < 10; i++) arr[i] = sc.nextInt();
System.out.println(getResult(c, b, arr));
}
// 算法入口
public static int getResult(int c, int b, int[] arr) {
HashMap<Integer, Integer> count = new HashMap<>();
Arrays.stream(arr)
.map(
a -> {
String str = Integer.toHexString(a);
if (str.length() % 2 != 0) {
str = "0" + str;
}
int sum = 0;
for (int i = 0; i < str.length() - 1; i += 2) {
sum += Integer.parseInt(str.substring(i, i + 2), 16);
}
int t = sum % b;
if (t < c) {
return t;
} else {
return -1;
}
})
.forEach(
t -> {
if (t != -1) {
count.put(t, count.getOrDefault(t, 0) + 1);
}
});
return count.values().stream().max((x, y) -> x - y).orElse(0);
}
}
Python算法源码
# 输入获取
tmp = list(map(int, input().split()))
c = tmp[0]
b = tmp[1]
arr = tmp[2:]
# 判断是否有效
def classify(a):
s = hex(a)[2:] # hex方法会将十进制转为0x开头的16进制数,这里去除0x前缀
if len(s) % 2 != 0:
s = "0" + s # 补足0
sumV = 0
for i in range(0, len(s) - 1, 2):
sumV += int(s[i:i + 2], 16)
t = sumV % b
if t < c:
return t
else:
return -1
# 算法入口
def getResult():
count = {}
for t in map(classify, arr):
if t != -1:
if count.get(t) is None:
count[t] = 1
else:
count[t] += 1
return max(count.values())
# 算法调用
print(getResult())
免责声明:
1、IT资源小站为非营利性网站,全站所有资料仅供网友个人学习使用,禁止商用
2、本站所有文档、视频、书籍等资料均由网友分享,本站只负责收集不承担任何技术及版权问题
3、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除下载链接并致以最深的歉意
4、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
5、一经注册为本站会员,一律视为同意网站规定,本站管理员及版主有权禁止违规用户
6、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和IT资源小站的同意
7、IT资源小站管理员和版主有权不事先通知发贴者而删除本文
评论0