我的博客

8 月 8 日笔试

目录
  1. 编程题
    1. 第一题
    2. 第二题

选择题都是多项选择,比较难做。

其中涉及到一个问题:DNS是否是使用UDP协议,DNS似乎在客户端查询使用UDP而服务器间同步使用TCP。

数据库索引,有给出情况计算需要扫描多少条记录等多道题目。

还有 25 匹马,每 5 匹同时比赛,赛多少次能得到前三名的。(答案是 7 次)

还有很多排序问题,例如快排的最优,最差时间复杂度,快排不是稳定排序,快排是否在所有情况下都比选择排序快。使用一个额外空间的排序算法有哪些等等。

编程题

第一题

输入一个字符串,转换成驼峰命名,就是开头第一个字母小写,所有非字母数字后面紧跟的一个字母大写,去掉所有非字母和非数字。

样例一

This is 5th example

输出

thisIs5thExample

样例二

_hello_world!

输出

helloWorld

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
x = input()
r = []
f = False
for ch in x:
if ch.isalpha() or ch.isdigit():
if f and len(r) != 0:
r.append(ch.upper())
else:
r.append(ch.lower())
f = False
else:
f = True
print(''.join(r))

第二题

给出一个整数,n 位,(n < 1000) 输出和 n 组成数字相同,但是比 n 小的最大整数,没有这样的数则输出 0。

样例(为了方便我把多个样例写一起了)

3213
10010
165
998877665544332211
23
103

输出

3132
10001
156
998877665544332121
0
0

这题需要注意的是,选择了要交换的位以后还需要把后面所有位降序排序,才能得到这个情况下的最大数

代码

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
31
lll = ''''''
lll = lll.split('\n')
lll.reverse()

if True:
n = list(input())
# print(n)
f = False
for i in range(len(n)-2, -1, -1):
if n[i] == '0':
continue
maxv = -1
maxi = -1
for j in range(i+1, len(n)):
if int(n[j]) < int(n[i]) and (i!= 0 or n[j] != '0'):
if int(n[j]) > maxv:
maxv = int(n[j])
maxi = j
# print(maxv, maxi)

f = True
if f:
break
if f:
n[i], n[maxi] = n[maxi], n[i]
nn = n[i+1:]
nn.sort(reverse=True)
print(''.join(n[:i+1] + nn))
print(''.join(n))
else:
print(0)

评论无需登录,可以匿名,欢迎评论!