首页 > 华为4.21笔试 A了两题,分享下代码
头像
小秃子
编辑于 2021-04-21 22:53
+ 关注

华为4.21笔试 A了两题,分享下代码

Python代码,攒点人品,有想法评论留言哈~
第一题:

采用数组来做,两层循环, 正确率100%

import sys
n, m = input().split()
anpai = [0 for i in range(24)]
for i in range(int(n)):
    A, L, C = input().split()
    C = int(C)
    flag = 0  # 记录该时间端是否满员
    for j in range(int(A), int(L)):
        if(anpai[j] + C > int(m)):
            flag = 1
            break
    if flag == 0:
        for j in range(int(A), int(L)):
            anpai[j] += C
for i in range(24):
    print(anpai[i], end=' ')

第二题:
对于无效模块,采用数组,判断是否出现过来数个数
对于循环模块,采用递归,不断试路线来解决
正确率88%,应该是没有考虑分数为负值的情况,可惜了
import sys
m = int(input())
n = int(input())
num = {}
have = []
for i in range(n):
    son, fat = input().split()
    #----将出现的加入进去
    if son not in have: have.append(son)
    if fat not in have: have.append(fat)
    # ---------
    if son in num:
        num[son].append(fat)
    else:
        num[son] = [fat]
NoUseNum = m - len(have)
CircleNum = 0



for son in num:
    # 对每个数字的依赖进行循环,并且不断的跳入循环,直到走到只有一个数组或发现循环
    stack = [son]  # 走入他的依赖,就将他放入栈
    stackTimes = [len(num[son])]  # 维护一个依赖列表的数量,确保将所有依赖都走一遍
    break2 = False
    while sum(stackTimes) != 0:
        if stackTimes[-1]-1 >= 0:
            path = num[stack[-1]][stackTimes[-1]-1]
            if path in stack:
                break2 = True
                CircleNum = 1
                break
            stack.append(path)
            if path not in num:
                stackTimes.append(0)
            else:
                stackTimes.append(len(num[path]))
        else:
            stackTimes.pop()
            stack.pop()
            stackTimes[-1] -= 1
    if break2: break

print(int(10 - NoUseNum - 2 * CircleNum))


全部评论

(7) 回帖
加载中...
话题 回帖

相关热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐