20200812 华为校招笔试
这次的题目明显比较简单...
第一题 模拟找钱
假设咖啡卖 5 元,每个客户可能给你 5、10、20 元的纸币,初始情况下你没有任何纸币,问是否能够找零。如果能找零就输出 true,总用户数
, 否则输出 false,失败的用户index
。
例如:5,5,5,10
=> true,4
10,10
=> false,1
就简单的记录一下各个纸币的数目就行:
def run1(): moneys = list(map(int, input().split(','))) number_of_5 = 0 number_of_10 = 0 number_of_20 = 0 for index, value in enumerate(moneys): if value == 5: # ok number_of_5 += 1 continue elif value == 10: # return 5 number_of_10 += 1 number_of_5 -= 1 if number_of_5 < 0: print('false,'+str(index + 1)) return elif value == 20: # return 15 number_of_20 += 1 if number_of_10 > 0 and number_of_5 > 0: number_of_10 -= 1 number_of_5 -= 1 elif number_of_5 > 0: number_of_5 -= 3 if number_of_5 < 0: print('false,'+str(index + 1)) return else: print('false,'+str(index + 1)) return else: print('false,'+str(index + 1)) return print('true,'+str(len(moneys)))
第二题 走路
小明步长 l, 有一个 m x n 的矩阵, 1 表示能走 0 表示不能走,小明可以横着走竖着走,方向不限制,问小明能否从左上角走到右下角。
输入:
2 3 5 1 0 1 0 0 0 1 1 0 1 0 0 1 0 1`
输出:1
简单的 DFS,在此不表。
第三题 大 X 输出字符串
给定 X 的行数,按照 X 样式输出字符串:
例如:EVERYTHINGGOESWELL,5
=> EIWETGELYORHGSLVNE
E V E R Y T H I N ...
就简单的输出一下:
def computeCol(n, i): if i < n: if i % 2 == 0: return i // 2 return n - 1 - (i // 2) else: center = n // 2 offset = (i - n) // 2 + 1 if i % 2 != 0: return center - offset return center + offset def run(): string, length = input().split(',') length = int(length) result = [[] for _ in range(length)] for i, val in enumerate(string): result[computeCol(length, i % (2 * length - 3))].append(val) for i in result: for j in i: print(j, end = '') print('')#笔经##华为#