【2023秋招】10月26日华为机试三道题题目

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 0m20

0 ≤ n ≤ 5000 0\le n\le 5000 0n5000

输出描述

输出一个整数,表示结果

样例

样例一:

输入

99 2
1 8

输出

1188

样例二:

输入

121 3
1 2 3

输出

121

第三题:二元表达式解析和校验

题目内容

给定一个二元表达式,判断本表达式是否有语法错误,并按类前缀表示法输出。

二元表达式约束如下:

  1. 二元表达式的结构为: 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
  2. 其左操作数( 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 ) 支持 + + + 一 一 ∗ * / / / 四种;
    • 操作符需要考虑优先级,支持括号,括号优先级最高,其次是 ∗ * / / / ,最后为 + + + − -
  3. 右操作数( 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 )规则一样。
  4. 操作数和操作符之间可以有多个空格。
  5. 表达式仅支持上述约束,其它都作为非法输入(例如:求余操作符 % \% % )。

输入描述

输入一个表达式字符串,字符串长度不超过 2000 2000 2000

输出描述

  1. 输出为:校验结果:按类前缀表示法输出。
  2. 校验结果:校验通过,则为 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
  3. 类前缀表达法:按照树形结构展示表达式,然后按树的前序遍历进行输出,如样例 1 1 1 ,输入为 1 + b ∗ 3 1+b*3 1+b3 ,输出为: t r u e : ( + , 1 , ( ∗ , b , 3 ) ) true:(+,1,(*,b,3)) true:(+,1,(,b,3))
  4. 如果操作符的优先级一样,则按输入顺序构建树,然后按树的前序进行输出,如样例 2 2 2 :输入为 1 + b − 3 1+b-3 1+b3 ,输出为: t r u e : ( − , ( 1 + b ) , 3 ) true:(-,(1+b),3) true:(,(1+b),3)
  5. 表达式里面的括号,用于定义优先级,不在输出结果体现(注意:输出结果中的的括号仅是三元表示法的分割符),如样例 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

你可能感兴趣的:(华为,算法)