美文网首页
python3读取输入(练习题)

python3读取输入(练习题)

作者: 0error_ | 来源:发表于2020-03-24 15:26 被阅读0次

    找了两道不太复杂的题来试一下读取输入输出(先从简单的开始⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄)
    这两个题的共同特点是:会读到一个数N,这个数N意味着接下来会有N行输入,并且要对每行的输入进行一些处理。
    (更复杂的读取输入后续再更……)

    1. 任务列表(360公司2017春招真题)

    来源:https://exercise.acmcoder.com/online/online_judge_ques?ques_id=3982&konwledgeId=42
    题目描述
    现在现在有一台机器,这台机器可以接收两种形式任务:(1)任务列表,任务列表里面有N个任务,对于第i个任务,机器在Ti时间开始执行,并在1个单位时间内做完。(2)临时任务,机器可以在任意时间接收一个临时任务,但任务列表里面的任务优先级要高于临时任务,也就是说当机器空闲的时候才会执行临时任务。
    现在机器已经接收一个任务列表。接下来会有M个临时任务,我们想知道每个临时任务何时被执行。为了简化问题我们可以认为这M个临时任务是独立无关即任务是可以同时执行的,互不影响的。

    image.png
    太长不看的解释:

    1、第一行先读N和M,虽然N好像后续没什么用,M是临时任务的个数(行数)
    2、任务列表里面找没出现的数字,比如样例12356,没出现的就是4!那么临时任务里所有≤4的 :3,2,1,4 ,的输出都是4!!
    (怎么找这个间断点,刚开始想的是用数字数组,后来想的是前一个数字+1 !=后面的数字,都有点麻烦)
    临时任务里大于4的,那就要等任务列表里的任务都执行完再执行了,所以5、6对应的输出就是6+1=7

    注意这种读进来一个数N,代表着接下来有N行,并且每行输入完就进行处理的这种,在读那N行的时候可以用: for i in range(N)

    大神题解地址:https://exercise.acmcoder.com/online/online_judge_answer?ques_id=3982&konwledgeId=42#

    image.png
    if __name__ == "__main__":
        while 1:
            N,M = map(int,input().split())
            L = list(map(int,input().split())) #任务列表
            for i in range(M):
                x = int(input())
                while True:
                    if x in L:
                        x +=1
                    else:
                        print(x)
                        break
    
    2. 动脑子认老乡

    https://exercise.acmcoder.com/online/online_judge_ques?ques_id=9579&konwledgeId=137&opencustomeinput=true
    大学的同学来自全国各地,对于远离家乡步入陌生大学校园的大一新生来说,碰到老乡是多么激动的一件事,于是大家都热衷于问身边的同学是否与自己同乡,来自新疆的小赛尤其热衷。但是大家都不告诉小赛他们来自哪里,只是说与谁是不是同乡,从所给的信息中,你能告诉小赛有多少人确定是她的同乡吗?

    image.png
    太长不看的解释:

    1、分析第二个样例,5的意思是有5个人,4的意思是有4组关系,就是接下来要有4行(期待地搓手手)
    2、1 2 1 的意思是 1同学 和 2同学, 是同乡;3 4 0的意思是3同学和4同学不是同乡。本人是1同学。要找本人的同乡。
    比如这个第二个样例, 1和2是同乡,2和5是,3和2是,那么1的同乡有2,3,5,一共3个人。要输出3

    看了几个大神的答案感觉这个理解起来很适合我
    https://exercise.acmcoder.com/online/online_judge_answer?ques_id=9579&konwledgeId=137#

    image.png
    把解释写在了后面的代码注释里:
    if __name__ == "__main__":
        while 1:
            #N个人,M组关系,即接下来有几行
            N,M = map(int,input().split())
            res = [] #新建一个同乡会
            for i in range(M): #有M行即将到达
                a, b, c = map(int,input().split())
                if c == 1: #如果是同乡关系 
                    r = [a,b] if a<b else[b,a] #升序,比如[3,2]就要转成[2,3]
                    res.append(r) #存入同乡会
            #终于读完了这M行
            s = set() #集合是去重的
            s.add(1)#把主人公放进集合里
            res.sort() #升序排序
            for i in res: # 是同乡关系的有几组
                if i[0] in s: #如果新的同乡关系里出现了已是同乡的人
                    s.add(i[1]) #把跟主人公是同乡关系的人放进集合
            print(len(s)-1) #s里面是主人公和主人公的同乡,所以要减去主人公
    

    相关文章

      网友评论

          本文标题:python3读取输入(练习题)

          本文链接:https://www.haomeiwen.com/subject/ziboyhtx.html