华为机考题-牛客网-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算为同一种分法)

恕我愚笨,没写出来... 欢迎大家提供解法

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值