华为机考题-牛客网-20200818 Python
第一题:对几个硬盘按照内存大小排序
要求对提供的几个不同容量的硬盘从小到大排序
输入: 第一行为 硬盘数量,后面每行为 每个硬盘的大小 (单位是M,G,T的组合形势), eg. 3M2G, 1024M, 5G12M, 2T15M
输出: 按从小到大的顺序输出 (注意同等大小的硬盘(eg.1024M 和 1G),需要保序输出)
举例:
3
1T
3M2G
2G5M
输出:
3M2G
2G5M
1T
while True: try: comp_li = [] for _ in range(int(input())): string = input() a = "" total_v = 0 for ch in string: if ch.isdigit(): a += ch else: if ch == "T": total_v += int(a)*1024*1024 elif ch == "G": total_v += int(a)*1024 elif ch == "M": total_v += int(a) a = "" comp_li.append([string, total_v]) print("comp_li: ", comp_li) items = sorted(comp_li, key=lambda x: x[1]) print("items:", items) for item in items: print(item[0]) except: break
第二题: 匹配字符串 要求从字符串t中找出第一个字符串p 对应在t中的下标(注意:下标从1开始算起),规定 字符串 t比 p 长
输入: 第一行为字符串 t, 第二行为字符串 p
输出: 对应的下标
举例:
输入的两行为:
AVERDXIVYERDIAN
RDXI
输出为: 4
while True: try: t = input() p = input() nt, np = len(t), len(p) for i in range(len(t)): if len(t) - i < len(p): print("No") break if p == t[i:i+np]: print(i+1) break except: break
第三题:求给员工发月饼的分法的数量
n个月饼发给m个员工,要求每个员工至少一个月饼,且按照分发的数量排序后,相邻分发数量之间的差值 <=3
输入:第一行为 m, n,以空格分隔
输出:一共多少种分法
举例:
输入:2 5
输出:2 (解释:5=1+4, 5=2+3. 注意:2+3和3+2算为同一种分法)