文章目录
- 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 [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)
