机试
不知道可不可以放出来,所以这里就不说明是哪里的题目了,如有侵权,联系我立刻删除(狗头保命)。
第一题 出租车计费
程序员小明打了一辆出租车去上班。出于职业敏感,他注意到这辆出租车的计费表有点问题,总是偏大。出租车司机解释说他不喜欢数字4,所以改装了计费表,任何数字位置遇到数字4就直接跳过,其余功能都正常。
比如:
23再多一块钱就变为25;
39再多一块钱变为50;
399再多一块钱变为500;
小明识破了司机的伎俩,准备利用自己的学识打败司机的阴谋。给出计费表的表面读数,返回实际产生的费用。
1 | 输入描述: |
做的时候脑子不会急转弯了。我尝试暴力求解会超时,通过率90%。
第二题 两数之和绝对值最小
给定一个随机的整数(可能存在正整数和负整数)数组nums
,请你在该数组中找出两个数,其和的绝对值(|nums[x]+nums[y]|)
为最小值,并返回这个两个数(按从小到大返回)以及绝对值。
1 | 输入描述: |
🐸跳的方式,暴力可以过。
第三题 仿LISP运算
LISP语言唯一的语法就是括号要配对。形如 (OP P1 P2 …)
,括号内元素由单个空格分割。其中第一个元素OP
为操符,后续元素均为其参数,参数个数取决于操作符类型注意:参数 P1, P2
也有可能是另外一个嵌套的 (OP P1 P2 )
当前OP
类型为add
/sub
/mul
/div
(全小写),分别代表整数的加减乘除法。简单起见,所以OP
参数个数为2。
举例
输入:(mul 3 -7)
输出:-21
输入:(add 1 2)
输出:3
输入:(sub (mul 2 4) (div 9 3))
输出 :5
输入:(div 1 0)
输出:error
括号匹配思路解决。
题解做的时候没保存到本地,写文章的时候没有地方测试是否100%正确,所以没贴出来。后面有时间上传到 Github 上(先立一个🚩)。
评论