1. 军训队列
    题目描述
  2.  
  3. 某大学开学进行军训队列训练,将学生从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列剩下的依次向前靠拢,再从头开始进行一至三报数,凡报到三的出列,剩下的依次向前靠拢,继续从头开始进行一至二报数。。。以后每次从头开始轮流进行一至二报数、一至三报数直到剩下的人数不超过三人为止。
  4.  
  5. 输入
    第一行为组数N,接着为N行学生人数,学生人数不超过5000
    样例输入
    2
    20
    40
    输出
    输出有N行,分别对应输入的学生人数,每行输出剩下的学生最初的编号,编号之间有一个空格。
    样例输出
    1 7 19
    1 19 37
    时间限制
    C/C++语言:1000MS其它语言:3000MS
    内存限制
    C/C++语言:65536KB其它语言:589824KB
    试题地址:http://exercise.acmcoder.com/online/online_judge_list_all
  6.  
  7. 在赛码网上做算法题,遇到这样一道题。
  8.  
  9. 我的能力虽然一般,还需要继续努力才能进步。
    但是希望记录下来学会一道题的想法,可以提供给一些没有思路的朋友们一个参考!
    代码捉襟见肘,还请见谅~
  10.  
  11. 这是一道动态规划的题。
    动态规划大致的思路就是:
      把一个庞大的问题每次只完成一小步,每次都得到一个阶段的结果,然后用这个结果去当作下一阶段的开始状态。
      并且每一步都是一个决策,不会影响接下来阶段的决策,每个阶段是独立的。
  12.  
  13. 我的思路是:
      1 根据输入人数m,初始化一个数组list,下标从0m-1号依次存入1m号,表示他们的编号
      2 开启一个新的队列res,对list进行12报数:
        list所有报1的位置里面的值依次入队列res,一直到list遍历结束
        执行3:对res 进行13报数
      3 res进行13报数:
        开启一个队列res2
          把所有喊12的位置的元素依次入队列到res2 一直到res队列遍历结束
          执行2:在对res2进行12报数
      。。。。
      最终,当结果队列里面少于三个元素时候,结束,得到了结果!
  14.  
  15. 我是用python3来实现的:
  1. # coding:utf8
  2. #list是当前队列里按顺序排号的编号,step是本次要执行1到几报数
  3. def result(list, step):
  4. if len(list) <= 3: #如果不多于3人,则应该返回结果
  5. return list
  6. res = [] #用于存储结果
  7. if step == 2: #如果是1到2报数
  8. res = list[::2] # 把list里的所有报2的人踢出去,剩下1 的人存给新列表res
  9. return result(res, 3) #递归调用:再对res进行1到3报数
  10. else: #否则 当前是1到3报数
  11. cur = 0 #临时变量 表示当前所在0号位置 我们进行向下遍历操作
  12. while cur < len(list): #如果当前还没到队尾
  13. res.append(list[cur]) #把当前这个人放到res里
  14. if cur + 1 < len(list):
  15. res.append(list[cur + 1]) #把这个人的下一个人也放res里
  16. cur += 3 #cur向后移动3人的位置
  17. #跳出循环后,我们把报1和2 的人都放进了res,在对res进行1到2报数
  18. return result(res, 2)
  19. #这样一直递归调用,每次都新开一个res来存留下来的人,一直到res里小于等于3个人的时候就是结果。
  20.  
  21. def main():
  22. n = int(input()) #接收测试用例数
  23. for i in range(n): #每一次测试用例都做的
  24. m = int(input()) #接收一个队列人数
  25. list = [j for j in range(1, m + 1)] #一个列表,从0到m-2 每个位置里面存了人的编号1到m
  26. #调用方法得到列表,把列表转换成符合题目要求的字符串
  27. res = str(result(list, 2)).lstrip("[").rstrip("]").replace(",", " ")
  28. print(res)
  29.  
  30. if __name__ == '__main__':
  31. main()
  1.  

赛码网算法: 军训队列( python实现 )的更多相关文章

  1. 赛码网算法: 上台阶 ( python3实现 、c实现)

    上台阶 题目描述 有一楼梯共m级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第m级,共有多少走法?注:规定从一级到一级有0种走法. 输入输入数据首先包含一个整数n(1<=n<=1 ...

  2. 【JavaScript】赛码网前端笔试本地环境搭建

    参考:https://hoofoo.me/article/2017-04-11/%E8%B5%9B%E7%A0%81%E7%BD%91%E5%89%8D%E7%AB%AF%E7%AC%94%E8%AF ...

  3. 量化交易中VWAP/TWAP算法的基本原理和简单源码实现(C++和python)(转)

    量化交易中VWAP/TWAP算法的基本原理和简单源码实现(C++和python) 原文地址:http://blog.csdn.net/u012234115/article/details/728300 ...

  4. Python实现的数据结构与算法之队列详解

    本文实例讲述了Python实现的数据结构与算法之队列.分享给大家供大家参考.具体分析如下: 一.概述 队列(Queue)是一种先进先出(FIFO)的线性数据结构,插入操作在队尾(rear)进行,删除操 ...

  5. ACM 五一杭电赛码"BestCoder"杯中国大学生程序设计冠军赛小记

    对于这项曾经热爱的竞赛,不得不说这是我最后一年参加ACM比赛了,所以要珍惜每一次比赛的机会. 五一去杭电参加了赛码"BestCoder"杯中国大学生程序设计冠军赛,去的队伍包括了今 ...

  6. 经典算法之归并排序——python和JS实现

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:韩忠康 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自 ...

  7. 《Python Web开发实战》|百度网盘免费下载|Python Web开发

    <Python Web开发实战>|百度网盘免费下载|Python Web开发 提取码:rnz4 内容简介 这本书涵盖了Web开发的方方面面,可以分为如下部分: 1. 使用最新的Flask ...

  8. 《python开发技术详解》|百度网盘免费下载|Python开发入门篇

    <python开发技术详解>|百度网盘免费下载|Python开发入门篇 提取码:2sby  内容简介 Python是目前最流行的动态脚本语言之一.本书共27章,由浅入深.全面系统地介绍了利 ...

  9. 《精通Python网络爬虫》|百度网盘免费下载|Python爬虫实战

    <精通Python网络爬虫>|百度网盘免费下载|Python爬虫实战 提取码:7wr5 内容简介 为什么写这本书 网络爬虫其实很早就出现了,最开始网络爬虫主要应用在各种搜索引擎中.在搜索引 ...

随机推荐

  1. Django数据模型——通用字段选项

    字段 一个模型最重要也是唯一必需的部分,是它定义的数据库字段 字段名称限制 1.字段名不能是python保留字,这样会导致python语法错误 2.字段不能包含连续一个以上的下划线,这样会和Djang ...

  2. memcache搭建

    memcache搭建步骤: 个人原创,允许转载,请注明出处,作者,否则追究法律责任. 0.1 memcache的服务端0.2 mysql的服务端0.3 memcache 的客户端:lamp架构 1,环 ...

  3. wim命令删除后重新安装

    个人原创博客,转载请注明,否则追究法律责任 2017-09-30-09:51:20 1,删除vim命令.模拟错误 [root@localhost ~]# which vim/usr/bin/vim[r ...

  4. TLA+和并发系统正确性验证

    TLA+介绍 TLA+(WIKI,官网)是一门领域特定语言,主要用于数理逻辑计算和并发系统的正确性验证.TLA+中的TLA代表的是"行为时序逻辑(Temporal Logic of Acti ...

  5. Shiro【授权、整合Spirng、Shiro过滤器】

    前言 本文主要讲解的知识点有以下: Shiro授权的方式简单介绍 与Spring整合 初始Shiro过滤器 一.Shiro授权 上一篇我们已经讲解了Shiro的认证相关的知识了,现在我们来弄Shiro ...

  6. SAP OLE中常用的一些方法和属性

    1.ole中如何保存和退出. call method of sheetname = filepath # =. call method of applicationname 'quit'. 2.给sh ...

  7. (jQuery知识点整理-含有选择器)

                                       第一单元                                       jQuery介绍:   javaScript ...

  8. 笔记:Struts2 输入校验

    Struts2的输入校验包含了客户端校验和服务器端校验,通过编写校验规则文件来实现输入校验,需要增加 Convention 插件,将 struts2-convention-plugin-2.3.31. ...

  9. 【Zabbix】大规模监控误报发生时的处理方案

    今天遇到了这样一件事..Zabbix一直在用的数据库突然间崩溃,无法连接了.在down掉的那一时刻开始,zabbix向管理员报了警.然后随之而来的是铺天盖地的所有主机zabbix agent无法连接的 ...

  10. <经验杂谈>C#对CA证书加密解密的简单介绍

    最近做项目接触了一些关于用CA证书加密解密的知识,现在分享一下,加密主要分为对称加密和非对称加密以及单项加密这三种,CA是一个权威的第三方认证机构,CA加密有公钥和私钥之分. 以下是C#读取证书文件进 ...