华为OD机试-数据分类

题目描述

对一个数据a进行分类,
分类方法是,此数据a(4个字节大小)的4个字节相加对一个给定值b取模,
如果得到的结果小于一个给定的值c则数据a为有效类型,其类型为取模的值。
如果得到的结果大于或者等于c则数据a为无效类型。

比如一个数据a = 0x01010101b = 3
按照分类方法计算:(0x01 + 0x01 + 0x01 + 0x01) % 3 = 1
所以如果c等于2,则此a就是有效类型,其类型为1
如果c等于1,则此a是无效类型

又比如一个数据a = 0x01010103b = 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
c3所以012都是有效类型
类型为12的有3个数据
类型为03的只有两个

示例二

输入

1 4 256 257 258 259 260 261 262 263 264 265

输出

2

代码实现

# coding utf-8
# 先验知识:ox代表16进制数,要取它的第四位,可以直接 x & 15
# 4字节相加计算方式,以26516为例:
# 二进制: 0110 0111 1001 0100
# 字节数 1 2 3 4
# 如何得到第一个字节:
# 将第一个字节右移3个字节,即是34=12位
# 结果:0000 0000 0000 0110 = 6
# 如何得到第二个字节:
# 将第二个字节右移2个字节,即是24=8位
# 结果:0000 0000 0110 0111
# 现在第二个字节移到了第四个字节,但是第一个字节也移到了第三个字节
# 怎么才能得到我们想要的呢,和0000 0000 0000 0000 1111做与(&)运算即可
# 即:0000 0000 0110 0111
# &0000 0000 0000 1111
# ————————————
# 0000 0000 0000 0111=7
# 第三第四字节以此类推
# 得出公式:(26516>>12)&15+(26516>>8)&15+(26516>>4)&15+26516&15

class Solution:
    def dataClassify(self, c, b, arr):
        data = arr
        count = 0
        res = [0 for i in range(len(data))]
        for i in range(len(data)):
            a1 = (data[i] >> 12) & 15
            a2 = (data[i] >> 8) & 15
            a3 = (data[i] >> 4) & 15
            a4 = data[i] & 15
            if (a1 + a2 + a3 + a4) % b < c:
                count += 1
                res[(a1 + a2 + a3 + a4) % b] += 1
        res.sort()
        return res[-1]


if __name__ == '__main__':
    s = input("input(c b arr1 arr2 .....arrx):").split(' ')
    arr = [int(s[i]) for i in range(len(s))]
    c = arr[0]
    b = arr[1]
    arr = arr[2:]
    solution = Solution()
    print(solution.dataClassify(c, b, arr))

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
华为OD机试-2023真题主要考察了以下几个方面的知识点: 1. 数据结构与算法:题目涉及了常见的数据结构和算法,如数组、链表、树、图、排序、搜索等。要求考生熟悉这些数据结构的基本操作和常用算法的实现方法。 2. 编程语言:题目要求使用C++或Java语言完成编程任务,要求考生熟悉相应语言的语法和常用的库函数使用方法。 3. 网络通信:题目涉及了网络通信相关的知识点,如TCP/IP协议、HTTP协议、socket编程等。要求考生了解网络通信的基本概念和实现方式。 4. 操作系统:题目要求考生熟悉操作系统相关的知识,如进程管理、内存管理、文件系统等。要求考生了解操作系统的基本功能和实现原理。 5. 数据库:题目涉及了数据库相关的知识点,如SQL语句的编写、数据库的设计和优化等。要求考生具备数据库的基本操作和设计能力。 6. 设计模式:题目要求考生能够根据给定的需求设计相应的对象和类,并且符合设计模式的原则。要求考生熟悉常见的设计模式和其应用场景。 7. 系统设计与架构:题目要求考生从整体上设计和实现一个系统,并考虑系统的性能、可扩展性等因素。要求考生了解系统设计的基本原则和方法。 以上是华为OD机试-2023真题的一些考点分类。考生在复习备考时,可以根据这些考点有针对性地进行学习和练习,提升自己的应试能力。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值