赛码网算法: 军训队列( python实现 )
军训队列
题目描述 某大学开学进行军训队列训练,将学生从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列剩下的依次向前靠拢,再从头开始进行一至三报数,凡报到三的出列,剩下的依次向前靠拢,继续从头开始进行一至二报数。。。以后每次从头开始轮流进行一至二报数、一至三报数直到剩下的人数不超过三人为止。 输入
第一行为组数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 在赛码网上做算法题,遇到这样一道题。 我的能力虽然一般,还需要继续努力才能进步。
但是希望记录下来学会一道题的想法,可以提供给一些没有思路的朋友们一个参考!
代码捉襟见肘,还请见谅~ 这是一道动态规划的题。
动态规划大致的思路就是:
把一个庞大的问题每次只完成一小步,每次都得到一个阶段的结果,然后用这个结果去当作下一阶段的开始状态。
并且每一步都是一个决策,不会影响接下来阶段的决策,每个阶段是独立的。 我的思路是:
1 根据输入人数m,初始化一个数组list,下标从0到m-1号依次存入1到m号,表示他们的编号
2 开启一个新的队列res,对list进行1至2报数:
把list所有报1的位置里面的值依次入队列res,一直到list遍历结束
执行3:对res 进行1至3报数
3 对res进行1至3报数:
开启一个队列res2
把所有喊1和2的位置的元素依次入队列到res2中 一直到res队列遍历结束
执行2:在对res2进行1至2报数
。。。。
最终,当结果队列里面少于三个元素时候,结束,得到了结果! 我是用python3来实现的:
# coding:utf8
#list是当前队列里按顺序排号的编号,step是本次要执行1到几报数
def result(list, step):
if len(list) <= 3: #如果不多于3人,则应该返回结果
return list
res = [] #用于存储结果
if step == 2: #如果是1到2报数
res = list[::2] # 把list里的所有报2的人踢出去,剩下1 的人存给新列表res
return result(res, 3) #递归调用:再对res进行1到3报数
else: #否则 当前是1到3报数
cur = 0 #临时变量 表示当前所在0号位置 我们进行向下遍历操作
while cur < len(list): #如果当前还没到队尾
res.append(list[cur]) #把当前这个人放到res里
if cur + 1 < len(list):
res.append(list[cur + 1]) #把这个人的下一个人也放res里
cur += 3 #cur向后移动3人的位置
#跳出循环后,我们把报1和2 的人都放进了res,在对res进行1到2报数
return result(res, 2)
#这样一直递归调用,每次都新开一个res来存留下来的人,一直到res里小于等于3个人的时候就是结果。 def main():
n = int(input()) #接收测试用例数
for i in range(n): #每一次测试用例都做的
m = int(input()) #接收一个队列人数
list = [j for j in range(1, m + 1)] #一个列表,从0到m-2 每个位置里面存了人的编号1到m
#调用方法得到列表,把列表转换成符合题目要求的字符串
res = str(result(list, 2)).lstrip("[").rstrip("]").replace(",", " ")
print(res) if __name__ == '__main__':
main()
赛码网算法: 军训队列( python实现 )的更多相关文章
- 赛码网算法: 上台阶 ( python3实现 、c实现)
上台阶 题目描述 有一楼梯共m级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第m级,共有多少走法?注:规定从一级到一级有0种走法. 输入输入数据首先包含一个整数n(1<=n<=1 ...
- 【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 ...
- 量化交易中VWAP/TWAP算法的基本原理和简单源码实现(C++和python)(转)
量化交易中VWAP/TWAP算法的基本原理和简单源码实现(C++和python) 原文地址:http://blog.csdn.net/u012234115/article/details/728300 ...
- Python实现的数据结构与算法之队列详解
本文实例讲述了Python实现的数据结构与算法之队列.分享给大家供大家参考.具体分析如下: 一.概述 队列(Queue)是一种先进先出(FIFO)的线性数据结构,插入操作在队尾(rear)进行,删除操 ...
- ACM 五一杭电赛码"BestCoder"杯中国大学生程序设计冠军赛小记
对于这项曾经热爱的竞赛,不得不说这是我最后一年参加ACM比赛了,所以要珍惜每一次比赛的机会. 五一去杭电参加了赛码"BestCoder"杯中国大学生程序设计冠军赛,去的队伍包括了今 ...
- 经典算法之归并排序——python和JS实现
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:韩忠康 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自 ...
- 《Python Web开发实战》|百度网盘免费下载|Python Web开发
<Python Web开发实战>|百度网盘免费下载|Python Web开发 提取码:rnz4 内容简介 这本书涵盖了Web开发的方方面面,可以分为如下部分: 1. 使用最新的Flask ...
- 《python开发技术详解》|百度网盘免费下载|Python开发入门篇
<python开发技术详解>|百度网盘免费下载|Python开发入门篇 提取码:2sby 内容简介 Python是目前最流行的动态脚本语言之一.本书共27章,由浅入深.全面系统地介绍了利 ...
- 《精通Python网络爬虫》|百度网盘免费下载|Python爬虫实战
<精通Python网络爬虫>|百度网盘免费下载|Python爬虫实战 提取码:7wr5 内容简介 为什么写这本书 网络爬虫其实很早就出现了,最开始网络爬虫主要应用在各种搜索引擎中.在搜索引 ...
随机推荐
- jmeter--简单的接口测试(GET/POST)
最近在学习接口测试,本文就简单的谈一谈对接口相关知识的理解. 一.什么是接口? 程序接口:由一套陈述.功能.选项.其它表达程序结构的形式.以及程序师使用的程序或者程序语言提供的数据组成(百度百科定义) ...
- 掌握这些知识,你的python水平能更上一层楼(续)
笔者的上一篇python文章阅读量不错,看来python爱好者很多,所以再写一篇,以飨读者. 先接着上一篇讲一个问题,下面这段code有没有问题? def countcalls(func): coun ...
- Mycat 分片规则详解--固定 hash 分片
实现方式:该算法类似于十进制的求模运算,但是为二进制的操作,例如,取 id 的二进制低 10 位 与 1111111111 进行 & 运算 优点:这种策略比较灵活,可以均匀分配也可以非均匀分配 ...
- 1833 深坑 TLE 求解
题目描述: 大家知道,给出正整数n,则1到n这n个数可以构成n!种排列,把这些排列按照从小到大的顺序(字典顺序)列出,如n=3时,列出1 2 3,1 3 2,2 1 3,2 3 1,3 1 2,3 2 ...
- 最小化安装CentOS7的网卡设置
实验环境:CentOS 7 Minimal Installation 64bit (1511) 最小化安装CentOS 7 后,查看网卡的信息让人很意外,因为网卡的命名规则变了,网卡的名字让人很难懂. ...
- CXF 开发 REST 服务
今天我们将视角集中在 REST 上,它是继 SOAP 以后,另一种广泛使用的 Web 服务.与 SOAP 不同,REST 并没有 WSDL 的概念,也没有叫做"信封"的东西,因为 ...
- GDB 调试多线程多进程
GDB是linux下的调试利器,在c/c++程序开发过程中必不可少的.这里总结一下多进程和多线程的调试方法和技巧. 多进程的调试: 如下示例 #include <sys/mman.h> # ...
- Algorithm --> 动态规划
动态规划 出处:http://hawstein.com/posts/dp-novice-to-advanced.html 什么是动态规划? 动态规划算法通常基于一个递推公式及一个或多个初始状态.当 ...
- memcache图形化管理工具MemAdmin
给大家介绍一款 memcache图形化管理工具: MemAdmin 下载地址: http://www.junopen.com/memadmin/ wget http://www.junopen.com ...
- Nginx出现500 Internal Server Error 错误的解决方案
500(服务器内部错误) 服务器遇到错误,无法完成请求. 501(尚未实施) 服务器不具备完成请求的功能.例如,当服务器无法识别请求方法时,服务器可能会返回此代码. 502(错误网关) 服务器作为网关 ...