华为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结束输入,输出为:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值