2023大厂真题提交网址(含题解):
www.CodeFun2000.com(http://101.43.147.120/)
最近我们一直在将收集到的机试真题制作数据并搬运到自己的OJ上,供大家免费练习,体会真题难度。现在OJ已录入50+道2023年最新大厂真题,同时在不断的更新。同时,可以关注"塔子哥学算法"公众号获得每道题的题解。
完整真题解析: 【2023秋招】10月26日华为机试三道题题目及题解
第一题:警察抓小偷游戏
题目内容
如下图,地图由凸点和凹点交替组成的 N N N 角星形状,警察和小偷初始在地图的凸点位置,每一轮小偷和警察依次移动(小偷先走),移动方向固定为逆时针移动。
警察每次走 2 2 2 步,小偷奇数轮走 1 1 1 步,偶数轮走 2 2 2 步,小偷移动到出发点位置时停走一轮。
请编写一个程序,找出警察抓住小偷的最少移动次数。
说明: 只有警察移动时,且移动的终点刚好与小偷位置重合则抓成功。
输入描述
每个凸点对应一个数字编号( 1 , 2 , . . . , N 1,2,...,N 1,2,...,N ),其中 N N N 取值范围 [ 5 , 1000000 ] [5,1000000] [5,1000000]
输入凸点的数目 N N N 、警察和小偷的起始位置 N , n , m {N, n, m} N,n,m 。
n n n , m m m 取值范围为 [ 1 , N ] [1,N] [1,N]
输入格式: N n m N\ n\ m N n m
输出描述
输出警察抓住小偷的最少移动次数。
样例
输入
5 1 3
输出
7
第二题:判断是否满足条件
题目内容
给出 m m m 个十进制一位数(可能重复,每个数字都是在 [ 0 , 9 ] [0,9] [0,9] 区间内的整数)
请尝试用这些数字组合出一个新的数字,使其为整数 n n n 的正整数倍。
求这个数字的最小值,如果不存在,那就输出 0 0 0
输入描述
第一行为两个整数 n n n 和 m m m ,分别为描述中对应参数
第二行有 m m m 个十进制一位数,以空格分割
数据范围:
0 ≤ m ≤ 20 0\le m\le 20 0≤m≤20
0 ≤ n ≤ 5000 0\le n\le 5000 0≤n≤5000
输出描述
输出一个整数,表示结果
样例
样例一:
输入
99 2
1 8
输出
1188
样例二:
输入
121 3
1 2 3
输出
121
第三题:二元表达式解析和校验
题目内容
给定一个二元表达式,判断本表达式是否有语法错误,并按类前缀表示法输出。
二元表达式约束如下:
- 二元表达式的结构为: l e f t E x p r e s s i o n leftExpression leftExpression o p e r a t o r operator operator r i g h t E x p r e s s i o n rightExpression rightExpression
- 其左操作数( l e f t E x p r e s s i o n leftExpression leftExpression )为一个正整数常量或一个变量或为一个子表达式,包括的规则如下:
-
- 正整数常量为 [ 1 , 2147483647 ] [1, 2147483647] [1,2147483647] 。
- 变量名只能由字母、数字和下划线组成,且必须以英文字母开头,不超过 8 8 8 位。例如: b b b 、 b 1 b1 b1 都是合法的,而 1 b 1b 1b 、 _ b \_b _b 、 { b \{b {b 都是不合法的。
- 操作符( o p e r a t o r operator operator ) 支持 + + + 、 一 一 一 、 ∗ * ∗ 、 / / / 四种;
- 操作符需要考虑优先级,支持括号,括号优先级最高,其次是 ∗ * ∗ 、 / / / ,最后为 + + + 、 − - − 。
- 右操作数( r i g h t E x p r e s s i o n rightExpression rightExpression ) 和左操作数( l e f t E x p r e s s i o n leftExpression leftExpression )规则一样。
- 操作数和操作符之间可以有多个空格。
- 表达式仅支持上述约束,其它都作为非法输入(例如:求余操作符 % \% % )。
输入描述
输入一个表达式字符串,字符串长度不超过 2000 2000 2000 。
输出描述
- 输出为:校验结果:按类前缀表示法输出。
- 校验结果:校验通过,则为 t r u e true true , 错误则为 f a l s e false false ,下列三种情况都算错误场景:
-
- 有语法错误,如: 1 b 1b 1b 结果是 f a s l e fasle fasle 。
- 不是二元表达式,如: a a a , ( a ) (a) (a) 等都是合法的一元表达式,但不是二元表达式,所以结果是 f a l s e false false 。
- 超出题干定义的语法约束,如: 4 % 2 4\%2 4%2 ,是合法的,但是题干不支持 % \% % 操作符,所以结果是 f a l s e false false 。
- 类前缀表达法:按照树形结构展示表达式,然后按树的前序遍历进行输出,如样例 1 1 1 ,输入为 1 + b ∗ 3 1+b*3 1+b∗3 ,输出为: t r u e : ( + , 1 , ( ∗ , b , 3 ) ) true:(+,1,(*,b,3)) true:(+,1,(∗,b,3)) 。
- 如果操作符的优先级一样,则按输入顺序构建树,然后按树的前序进行输出,如样例 2 2 2 :输入为 1 + b − 3 1+b-3 1+b−3 ,输出为: t r u e : ( − , ( 1 + b ) , 3 ) true:(-,(1+b),3) true:(−,(1+b),3) 。
- 表达式里面的括号,用于定义优先级,不在输出结果体现(注意:输出结果中的的括号仅是三元表示法的分割符),如样例 3 3 3 ,输入为: 4 − ( 1 + b ) ∗ 3 4-(1+b)*3 4−(1+b)∗3 ,输出为: t r u e : ( − , 4 , ( ∗ , ( + , 1 , b ) 3 ) ) true:(-,4,(*,(+,1,b)3)) true:(−,4,(∗,(+,1,b)3)) ;
样例
样例一:
输入
1+b*3
输出
true:(+,1,(*,b,3))
样例二:
输入
1+b-3
输出
true:(-,(+,1,b),3)
样例三
输入
4-(1+b)*3
输出
true:(-,4,(*,(+,1,b)3))
样例四:
输入
a*(1+2
输出
false
样例五:
输入
(a)
输出
false