Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

readme.md

2022年4、5月高频机试题

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

所有题目见《华为机试题整理(已更新185篇)》

题目 分值
字符串格式化输出 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分
高效的任务规划 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 当需要按多种条件同时进行排序问题,需要根据金牌数、银牌数、铜牌数、国家名称首字母4个条件同时排序,我们可以使用lambda构建排序规则实现

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