华为OD机试-多个数组合并

题目描述

现在有多组整数数组,需要将他们合并成一个新的数组,合并规则从每个数组里按顺序取出固定长度的内容 合并到新的数组,取完的内容会删除掉,如果改行不足固定长度,或者已经为空,则直接取出剩余部分的内容放到新的数组中继续下一行

输入描述 第一 行每次读取的固定长度,长度0<len<10 第二行是整数数组的数目,数目 0<num<10000 第3~n行是需要合并的数组,不同的数组用换行分割,元素之间用逗号分割,最大不超过100个元素

输出描述 输出一个新的数组,用逗号分割

示例1 输入 3 2 2,5,6,7,9,5,7 1,7,4,3,4 输出 2,5,6,1,7,4,7,9,5,3,4,7

说明 获得长度3和数组数目2,先遍历第一行 获得2,5,6,再遍历第二行 获得1,7,4,再循环回到第一行获得7,9,5 再遍历第二行获得3,4,再回到第一行获得7

示例2 输入 4 3 1,2,3,4,5,6 1,2,3 1,2,3,4 输出 1,2,3,4,1,2,3,1,2,3,4,5,6

分析

主要搞清楚循环的嵌套,弄清楚内外循环就可以像切矩阵那样大刀阔斧,切好的顺着排即为结果。

以示例1为例:

代码实现

# Python3
k = int(input())
n = int(input())
L = [list(map(int, input().split(","))) for _ in range(n)]
c = [len(row) for row in L] # 取出每个数组的长度
res = [] # 收集结果
j = 0
while j < max(c): # 外循环:反复按长度k切分每个数组用while循环,遍历到最长数组的长度。
    i = 0
    for i in range(n): # 内循环:依次切分数组用for循环
        if L[i][j:j + k]: # 非空则收集结果
            res.append(",".join(map(str, L[i][j:j + k])))
    j += k
print(",".join(res))

经验分享 程序员 微信小程序 职场和发展