华为OD-数据分类

数据分类

  1. 题目描述

对一个数据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个数据为需要分类的数据

请找到有效类型中包含数据最多的类型,

并输出该类型含有多少个数据

  1. 输入描述

输入12个数据用空格分割,

第一个数据为c,第二个数据为b,

剩余10个数据为需要分类的数据。

  1. 输出描述

请找到有效类型中包含数据最多的类型,

并输出该类型含有多少个数据。

示例

  1. 知识点:

“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字节表示,具体表示方法如下:

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

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

得到00000000 00000000 00000001 00000000

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

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

  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()))
  1. 代码解释:

  1. 循环遍历num_list中从第3个数到最后一个数,将每个数转换成二进制后,分割成4个字节(每个字节8位),然后将这4个字节分别转换成整数,并计算它们的和,将这个和添加到lin列表中。接着,将每个和对b取模后的结果添加到lin1列表中。

  1. 创建一个空字典dic,循环遍历lin1中的每个数,如果这个数小于c,就将它作为键存入字典中,并将值设置为lin1中i的数量。最后输出字典中值最大的元素。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值