zoukankan      html  css  js  c++  java
  • 军训队列

    题目描述(动态规划)

    某大学开学进行军训队列训练,将学生从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列剩下的依次向前靠拢,再从头开始进行一至三报数,凡报到三的出列,剩下的依次向前靠拢,继续从头开始进行一至二报数。。。以后每次从头开始轮流进行一至二报数、一至三报数直到剩下的人数不超过三人为止。

    输入

    第一行为组数N,接着为N行学生人数,学生人数不超过5000。

    输出

    输出有N行,分别对应输入的学生人数,每行输出剩下的学生最初的编号,编号之间有一个空格。

    样例输入

    2
    20
    40

    样例输出

    1 7 19
    1 19 37

    破题思路

    主要函数:按每2个出列的函数、每3个出列的函数。
    相关技巧:设置哨兵,每进行一次循环将哨兵进行取反操作,辅助交替按每2个出列和每3个出列。
    其它设置:ls[开始索引:结束索引:步长],默认设置:开始索引=0,结束索引=len(ls),步长=1。

    程序源码

    N = int(input())
    ms = [int(input()) for _ in range(N)]
    for m in ms:
    #将i变为i+1,人员编号从1开始
    ls = [i + 1 for i in range(m)]
    #设置哨兵,每进行一次循环将f值进行取反操作,辅助交替按每2个出列和每3个出列
        f = True
    while len(ls) > 3:
    #ls[::2]:表示按每2个进行出列的规则进行筛选时,所剩下的元素。
            ls = ls[::2] if f else [x for i, x in enumerate(ls) if (i + 1) % 3]
            f = not f
        for i in ls:
            print(i, end=' ')
    print()
    
  • 相关阅读:
    IDEA 中直接连接远程服务器
    浙江大学软件学院2020年保研上机
    PAT甲级近五年题一览表
    浙江大学计算机与软件学院2021年考研复试上机
    浙江大学计算机与软件学院2019年保研上机
    PAT(甲级)2021年春季考试
    PAT(甲级)2020年冬季考试
    PAT(甲级)2020年秋季考试
    PAT(甲级)2020年春季考试
    PAT(甲级)2019年冬季考试
  • 原文地址:https://www.cnblogs.com/wisteria68/p/12380092.html
Copyright © 2011-2022 走看看