华为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))
灵
下一篇:
【华为OD机试】递增字符串