机试
yuuki Lv5

不知道可不可以放出来,所以这里就不说明是哪里的题目了,如有侵权,联系我立刻删除(狗头保命)。

第一题 出租车计费

程序员小明打了一辆出租车去上班。出于职业敏感,他注意到这辆出租车的计费表有点问题,总是偏大。出租车司机解释说他不喜欢数字4,所以改装了计费表,任何数字位置遇到数字4就直接跳过,其余功能都正常。

比如:

​ 23再多一块钱就变为25;

​ 39再多一块钱变为50;

​ 399再多一块钱变为500;

小明识破了司机的伎俩,准备利用自己的学识打败司机的阴谋。给出计费表的表面读数,返回实际产生的费用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
输入描述:
只有一行,数字N,表示里程表的读数。
(1<=N<=888888888)。
输出描述:
一个数字,表示实际产生的费用。以回车结束。


示例1:
输入
5
输出
4
说明
5表示计费表的表面读数。
表示实际产生的费用其实只有4块钱。

示例2:
输入
17
输出
15
说明
17表示计费表的表面读数。
15表示实际产生的费用其实只有15块钱。
示例3:
输入
100
输出
81
说明:100表示计费表的表面读数,81表示实际产生的费用其实只有81块钱

做的时候脑子不会急转弯了。我尝试暴力求解会超时,通过率90%。

第二题 两数之和绝对值最小

给定一个随机的整数(可能存在正整数和负整数)数组nums,请你在该数组中找出两个数,其和的绝对值(|nums[x]+nums[y]|)为最小值,并返回这个两个数(按从小到大返回)以及绝对值。

1
2
3
4
5
6
7
8
9
10
11
输入描述:
一个通过空格分割的有序整数序列,最多1000个整数,且整数数值范围是 [-65535, 65535]。
输出描述:
两数之和和绝对值最小值


示例1:
输入
-1 -3 7 5 11 15
输出
-3 5 2

🐸跳的方式,暴力可以过。

第三题 仿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 上(先立一个🚩)。