数据分类
题目描述
对一个数据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位”表示为1bit
“1个字节”表示为1Byte
“1个字节”=“8位” 即1Bytes=8bit
“1个字”=两个byte=16位,
因此“4个字节”=4*8位=32位
此外,字母用用1个字节(即8位)进行表示和存储,而一个汉字则使用两个字节(即16位)进行表示和存储。
utf-8中文字符占三个字节,GB18030兼容GBK兼容GB2312中文字符占两个字节
3 4 256 257 258 259 260 261 262 263 264 265
示例中 第三个256可以用4字节表示,具体表示方法如下:
将256转换成二进制数,得到 100000000
由于4字节等于32位,因此将上述二进制数左侧补充24个0,
得到00000000 00000000 00000001 00000000
将上述二进制数每8位分为一组,分别转换成十进制数,得到 0、0、1、0
将上述4个十进制数相加取模得到1
直接上代码
# !E:\pythonScript\venv python3
# -*- coding: utf-8 -*-
"""
Date: 2023/3/15
Time: 15:49
Author: kang
"""
num_list = list(map(int, input().split()))
b = num_list[1]
c = num_list[0]
lin = []
lin1 = []
for i in range(2, len(num_list)):
li = []
suml = 0
# print(num_list[i], end=" ")
bi = bin(num_list[i])[2:].rjust(32, '0')
# print(bi, end=" ")
for j in range(0, 25, 8):
li.append(int(bi[j:j + 8], 2))
for k in li:
suml += k
lin.append(suml)
for i in lin:
lin1.append(i % b)
print(lin1)
dic = {}
for i in lin1:
if i < c:
dic[i] = lin1.count(1)
print(dic)
print(max(dic.values()))
代码解释:
循环遍历num_list中从第3个数到最后一个数,将每个数转换成二进制后,分割成4个字节(每个字节8位),然后将这4个字节分别转换成整数,并计算它们的和,将这个和添加到lin列表中。接着,将每个和对b取模后的结果添加到lin1列表中。
创建一个空字典dic,循环遍历lin1中的每个数,如果这个数小于c,就将它作为键存入字典中,并将值设置为lin1中i的数量。最后输出字典中值最大的元素。