华为机试真题c卷:螺旋数字矩阵+测试用例执行顺序+小区中的小朋友总数

1、螺旋数字矩阵

疫情期间,小明隔离在家,百无聊赖,在纸上写数字玩。他发明了一种写法:给出数字个数 n 和行数 m(0 < n ≤ 999,0 < m ≤ 999),从左上角的1 开始,按照顺时针螺旋向内写方式,依次写出 2,3…n,最终形成一个m行矩阵。小明对这个矩阵有些要求:
每行数字的个数一样多,列的数量尽可能少,填充数字时优先填充外部,数字不够时使用单个*号占位

输入描述:输入一行,两个整数,空格隔开,依次表示 n、m
输出描述:符合要求的唯一矩阵

import math

n, m = map(int, input().split()) # 读取要填充的数字个数n和矩阵的行数m,并转换为整型
cols = math.ceil(n / m) # 计算矩阵的列数,math.ceil用于向上取整
matrix = [[0 for _ in range(cols)] for _ in range(m)] # 创建一个m行cols列的整型矩阵,默认初始化为0
num = 1 # 数字从1开始
top, bottom, left, right = 0, m - 1, 0, cols - 1 # 初始边界值

while num <= n:
    for i in range(left, right + 1): # 从左到右填充上边界
        if num <= n:
            matrix[top][i] = num
            num += 1
    top += 1 # 上边界下移
    for i in range(top, bottom + 1): # 从上到下填充右边界
        if num <= n:
            matrix[i][right] = num
            num += 1
    right -= 1 # 右边界左移
    for i in range(right, left - 1, -1): # 从右到左填充下边界
        if num <= n:
            matrix[bottom][i] = num
            num += 1
    bottom -= 1 # 下边界上移
    for i in range(bottom, top - 1, -1): # 从下到上填充左边界
        if num <= n:
            matrix[i][left] = num
            num += 1
    left += 1 # 左边界右移

for row in matrix: # 遍历矩阵的每一行
    print(' '.join('*' if val == 0 else str(val) for val in row)) # 如果当前位置是0,则输出'*',否则输出当前位置的数字

2、测试用例执行顺序

某个产品当前迭代周期内有 N 个特性(F1,F2,…FN)需要进行覆盖测试,每个特性都被评估了对应的优先级,特性使用其 ID 作为下标进行标识。设计了 M 个测试用例(T1,T2,…,TM),每个测试用例对应一个覆盖特性的集合,测试用例使用其 ID 作为下标进行标识,测试用例的优先级定义为其覆盖的特性的优先级之和。
在开展测试之前,需要制定测试用例的执行顺序,规则为:优先级大的用例先执行,如果存在优先级相同的用例,用例 ID 小的先执行。

输入描述:
第一行输入为 N 和 M,
N 表示特性的数量,0 < N ≤ 100
M 表示测试用例的数量,0 < M ≤ 100
之后 N 行表示特性 ID=1 到特性 ID=N 的优先级,
再接下来 M 行表示测试用例 ID=1 到测试用例 ID=M 关联的特性的ID的列表。
输出描述:
按照执行顺序(优先级从大到小)输出测试用例的 ID,每行一个ID。测试用例覆盖的 ID 不重复。

# N表示特性的数量,M表示测试用例的数量
N, M = map(int, input().split())

# 存储每个特性的优先级
feature_priorities = []
for _ in range(N):
    priority = int(input())
    feature_priorities.append(priority)

# 存储每个测试用例的ID和优先级
test_cases = []
for i in range(M):
    features = list(map(int, input().split()))
    priority_sum = sum(feature_priorities[j - 1] for j in features)
    test_cases.append((i + 1, priority_sum))

# 按优先级降序排序,相同优先级时按 ID 升序排序
test_cases.sort(key=lambda x: (-x[1], x[0]))

# 输出按优先级排序后的测试用例 ID
for case in test_cases:
    print(case[0])

3、小区中的小朋友总数

幼儿园组织活动,老师布置了一个任务:
每个小朋友去了解与自己同一个小区的小朋友还有几个。将这些数量汇总到数组 garden 中。
请根据这些小朋友给出的信息,计算小区中的小朋友总数至少有多少个?
输入:garden[] = {2, 2, 3}
输出:7

import math

# 读取一行输入并按空格分割
input_str = input().split()

# 存储不同类型小区及其数量(小区类型根据小朋友人数划分)
record = {}
# 初始化结果变量为 0
result = 0

# 遍历输入以修改record
for i in input_str:
    # 将字符串转换为整数表示孩子数量
    kind = int(i)
    # 添加记录
    if kind not in record:
        record[kind] = 0
    record[kind] += 1

# 遍历record以计算结果
for kind, count in record.items():
    size = kind + 1
    result += math.ceil(count / size) * size

print(result)

你可能感兴趣的:(华为机试,华为,python)