• 军训队列


    题目描述(动态规划)

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

    输入

    第一行为组数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()
    
  • 相关阅读:
    基于发布/订阅模型的应用程序的主循环设计
    C++使用继承时子对象的内存布局
    安装 CentOS 后的系统配置及软件安装备忘
    环形无锁队列
    并发编程基础
    线程池实现
    Git远程操作
    Unix权限管理
    jquery中,某些写法后来更新导致版本不支持的替代方法
    js相关
  • 原文地址:https://www.cnblogs.com/wisteria68/p/12380092.html
Copyright © 2020-2023  润新知