【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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

塔子哥学算法

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值