【华为机试真题 Python实现】2022年4、5月高频机试题

文章目录

  • 2022年4、5月高频机试题
  • 机试必须要会的函数
  • 输入输出处理
  • for 循环
  • 通过下标访问元素
  • 直接迭代访问元素
  • 同时访问下标和元素
  • while 循环
  • 字符ASSIC码转换
  • 进制转换
  • 绝对值计算
  • 幂运算
  • 最值选取
  • 排序

  • 2022年4、5月高频机试题

    最近准备华为OD社招的同学还比较多,增加了100多的订阅,大多是没有编程经验的同学,上来一顿的搜题背题,没有去理解题目思考结题思路,导致机考时题目稍微一变化就不知道怎么做了,不过OD的机试的重复也是真的高,下面是最近整理的高频机试题,希望对你有帮助。

    题目 分值
    字符串格式化输出 100分
    按身高和体重排队 100分
    拼接 URL 100分
    磁盘容量排序 100分
    分糖果 100分
    圆桌队列 100分
    计算矩形相交面积 100分
    We Are A Team 100分
    数字涂色 100分
    最少交换次数来组合小于k的整数 100分
    员工工号问题 100分
    补种未成活胡杨 100分
    敏感字段加密 100分
    5键键盘的输出 100分
    IPv4地址转换成整数 100分
    水仙花数 100分
    单词接龙游戏 100分
    数大雁 100分
    二叉树按照中序遍历输出 100分
    太阳能板最大面积 100分
    考古学家 100分
    停车位问题 100分
    幼儿园找出同班的小朋友 100分
    计算三个矩形相交的面积 100分
    分苹果
    最长方连续方波信号
    欢乐的周末
    高效的任务规划 200分
    喊 7 的次数重排 200分
    解密犯罪时间 200分
    最长的指定瑕疵度的元音子串 200分
    面试(最少面试官数) 200分
    九宫格按键输入 200分
    仿 LISP 运算 200分
    路灯问题 200分
    书籍叠放问题 200分
    导师请吃火锅 200分
    数据分类 200分
    树形目录操作 200分
    奥运会奖牌榜的排名 200分
    转骰子 200分
    机器人走迷宫 200分
    跳格子游戏 200分
    高效的任务规划 200分
    圆桌队列 200分

    机试必须要会的函数

    输入输出处理

    华为OD社招使用的是ACM 模式,刷惯了LeetCode的同学一时可能会不适应,ACM模式你的代码需要处理输入input输出print

    while 1:
    	try: 
    	    # 输入
    	    a = input().split()
    	    # 输出
    	    print(int(a[0]) + int(a[1]))
    	except:
            break
    

    当输入的是 4 2 3 4 5 ,每行的第一个数字表示后面有效数据的格式时,我们可以这样处理 *nums

    n, *nums = input().split()
    print(n)
    print(nums)
    > 4
    > ['1', '2', '3', '4']
    

    当输入的数据需要批量转换数据类型是,我们可以使用 map

    n, *nums = list(map(int, input().split()))
    print(n)
    print(nums)
    > 4
    > [1, 2, 3, 4]
    

    当输入的逗号分隔的数据时,我们可以使用 .split(',')分隔

    当需要接收连续n行的输入时,我们可以使用推导式连续接收输入
    如:【华为机试真题 Python实现】机器人走迷宫 问题

    # 4
    # 1 2 3 4
    # 2 3 4 5
    # 3 4 5 6
    # 4 5 6 7
    
    n = int(input())
    nums = [input().split() for i in range(n)]
    print(n)
    print(nums)
    
    > 4
    > [['1', '2', '3', '4'],
    >  ['2', '3', '4', '5'],
    >  ['3', '4', '5', '6'],
    >  ['4', '5', '6', '7']]
    

    当需要输出指定格式,可以使用
    "".join() 不能拼接字符串,如果待处理数据时数值类型需要使用转化类型

    nums = [1, 2, 3, 4]
    print(",".join(map(str, nums)))
    > 1,2,3,4
    

    for 循环

    当我们需要遍历一个可迭代对象(字典、列表、集合、字符串等)不需要特殊处理下标时,推荐使用for循环,可以避免访问越界问题

    通过下标访问元素

    nums = [1, 2, 3, 4]
    
    for i in range(len(nums)):
        print(nums[i], end=" ")
    > 1 2 3 4
    

    直接迭代访问元素

    nums = [1, 2, 3, 4]
    for i in nums:
        print(i, end=" ")
    > 1 2 3 4
    

    同时访问下标和元素

    nums = [1, 2, 3, 4]
    for i, v in enumerate(nums):
        print(i, v, end=" ")
    > 0 1 1 2 2 3 3 4 
    

    while 循环

    当我们遇到滑动窗口问题,需要通过左右边界动态调整窗口大小时,推荐使用while

    nums = [1, 2, 3, 4]
    i = 0
    j = 1
    while j < len(nums):
        print(nums[i: j])
        j += 1
    > [1]
    > [1, 2]
    > [1, 2, 3]
    

    字符ASSIC码转换

    当遇到对字符处理的题是,比如 abcz 转为 bcda,实际是对assic值加1来处理的

    ord('a')
    > 97
    ord('b')
    > 98
    chr(97)
    > a
    

    进制转换

    【华为机试真题 Python实现】数据分类【2022 Q1 Q2 |200分】 问题中出现的 进制转换hex() 整型转16进制数,返回字符串

    函数名 功能
    hex 10进制转16进制数
    int 将一个字符串或数字转换为整型
    bin 10进制转2进制

    绝对值计算

    abs() 函数返回数字的绝对值

    幂运算

    pow() 函数方法返回 xy(x 的 y 次方) 的值
    我也可以使用 x**y 表示x 的 y 次方

    最值选取

    使用max获取最大值,min获取最小值

    排序

    当我们需要对列表、字典排序时,可以使用sorted
    当需要按多种条件同时进行排序时,如【华为机试真题 Python实现】奖牌榜的排名 问题,需要根据金牌数、银牌数、铜牌数、国家名称首字母4个条件同时排序,我们可以使用lambda构建排序规则实现

    dex_lst = sorted(temp.items(), key=lambda itm: itm[1], reverse=True)
    

    来源:不太灵光的程序员

    物联沃分享整理
    物联沃-IOTWORD物联网 » 【华为机试真题 Python实现】2022年4、5月高频机试题

    发表评论