2021华为校园招聘-软件-笔试
时间: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)