时间:2020年8月12日 19:00:00 -- 21:10:00
公司:华为
题型:3道编程题
第一题:
思路:初始化零钱,按照顾客支付顺序模拟,遇到零钱数额为负值返回false,顺利走完返回true
"""
每杯咖啡5元,客户支付5,10,20元三种,初始无备用零钱
输入:一串数字序列,表示顾客每次支付的金额
输出:如果能成功找零钱,返回true,顺序号;
如果不能成功,返回false,顺序号;
"""
def fun(pays):
money = {
5: 0,
10: 0,
}
for i, pay in enumerate(pays):
if pay == 5:
money[5] += 1
elif pay == 10:
money[5] -= 1
money[10] += 1
else:
money[5] -= 1
money[10] -= 1
if min(money.values()) < 0:
return 'false', i + 1
return 'true', len(pays)
p = list(map(int, input().split(',')))
f, l = fun(p)
print('{},{}'.format(f, l))
自己思路:从(0,0)点dfs,把所有可访问点加入visit集合中,最终如果右下角在集合内,说明可达,则返回1,否则返回0
第三题 91% 内存超了,求指点
""" 小明喜欢走地砖格,并且按照固定步长,某天小明通过一个部分铺设瓷砖的路,判断小明是否从左上角走到右下角 输入: 第一行步长s(s>0) 第二行为矩阵行M和列N(0 < M,N <= 100) 第三行开始为矩阵数值,0表示没地砖,不能走,1表示有砖,可以走 小明从左上角走到右下角(这两个位置保证为1) 输出: 可以通过返回1,否则返回0 """ s = int(input()) M, N = map(int, input().split()) matrix = [] for i in range(M): matrix.append(list(map(int, input().split()))) # 可以通过返回1,不能通过返回0 direction = ((s, 0), (0, s), (-1 * s, 0), (0, -1 * s)) visited = set() def go(i, j): if i < 0 or i >= M or j < 0 or j >= N or (i, j) in visited or matrix[i][j] == 0: return False visited.add((i, j)) for d in direction: go(i + d[0], j + d[1]) go(0, 0) if (M - 1, N - 1) in visited: print(1) else: print(0)
第三题 91% 内存超了,求指点
自己思路:使用10的X模板,首先顺序输入字符串,同时遍历模板矩阵,只存放在1的位置,存放完毕后,再按列输出即可
"""
输入一个仅由大写字母组成的字符串string和一个指定的奇列数N
其中(1 < len(string) <= 2000), (3 <= N < 1000)
输出变形后的新字符串
例如:
输入:
EVERYTHINGGOESWELL,5
['E', 0, 0, 0, 'V']
[0, 'E', 0, 'R', 0]
[0, 0, 'Y', 0, 0]
[0, 'T', 0, 'H', 0]
['I', 0, 0, 0, 'N']
[0, 'G', 0, 'G', 0]
[0, 0, 'O', 0, 0]
[0, 'E', 0, 'S', 0]
['W', 0, 0, 0, 'E']
[0, 'L', 0, 'L', 0]
输出:
EIWETGELYORHGSLVNE
"""
string, N = input().split(',')
N = int(N)
base = [[0] * N for _ in range(N)]
for i in range(N):
base[i][i] = 1
base[i][N - i - 1] = 1
base = base[:-1]
template = []
x = len(string) // (2 * N - 3) + 1
for i in range(x):
for j in base:
template.append(j[:])
def next(i, j):
if j == N - 1:
return i + 1, 0
else:
return i, j + 1
i, j = 0, 0
for c in string:
while template[i][j] != 1:
i, j = next(i, j)
template[i][j] = c
res = ''
for j in range(N):
for i in range(len(template)):
if template[i][j] not in [0, 1]:
res += template[i][j]
print(res)

全部评论
(7) 回帖