华为2020届暑期招聘笔试第一题
本人昨晚参加华为2020届暑期实习笔试,奈何学艺不精,数据输入卒。由于从前从未试过在线编程,没有经验,本人编程能力也不强,对于此结果也能接受,勉励自己要好好学习,多多练习。
题目大致描述
输入为n行数字,第一行为数字a,第2到n行均为数组,每行数据形式例如2,3,4,5,每行数据长度不定,n也不定。
数据输出为从第二行数据开始截取前a个数据放在新数组中,并将这a个数据从第二行删除,接着转到第三行,进行同样操作,数据依次放在新数组中,依次操作直到第n行。再转到第2行开始重复操作。若是某行数据长度小于等于a,则将整行数据放在新数组中,直到所有数据放在新数组中为止。
输出一行新数组,输出格式类似于 2,3,4,5,6,7。即数字之间用逗号分隔。
eg:
输入:
3
1,2,3,4,5
2,3,4,5,6,7,8,9,0
输出:
1,2,3,2,3,4,4,5,5,6,7,8,9,0
华为笔试要求数据输入用sys.stdin, 题目要求读取终端所有数据,但所有测试数据行数不定, 本人对编程理解粗浅,对从屏幕终端读取数据一无所知,尤其在判断是否为文件最后一行更是束手无策。今天查了一下,sys.stdin是sys模块下的标准输入,在终端直接输入时以Ctrl+D结束,于是试着在pycharm重新写了一遍代码,不知道通过率如何,但是自己的测试数据结果都挺好。
python3代码:
import sys
if __name__ == "__main__":
# 读取步长
step = int(sys.stdin.readline().strip())
ans, length, lines = [], [], []
for linees in sys.stdin:
if linees:
linee = list(map(int, linees.split(",")))
lines.append(linee)
else:
break
length = [len(line) for line in lines]
for i in range(max(length)):
for line in lines:
#print(len(line))
if len(line) >= step:
ans.extend(line[0:step])
del line[0:step]
else:
ans.extend(line)
del line[0:len(line)]
aans = ''
for i in ans:
aans = aans + str(i)
print(",".join(aans)) #要求输出格式是 2,3,4,5,6 类型
对于示例,我以ctrl+D结束输入,输出为: