赛码网算法: 军训队列( 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来实现的:

 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 
22 def main():
23     n = int(input())    #接收测试用例数
24     for i in range(n):  #每一次测试用例都做的
25         m = int(input())    #接收一个队列人数
26         list = [j for j in range(1, m + 1)] #一个列表,从0到m-2 每个位置里面存了人的编号1到m
27         #调用方法得到列表,把列表转换成符合题目要求的字符串
28         res = str(result(list, 2)).lstrip("[").rstrip("]").replace(",", " ")
29         print(res)
30 
31 
32 if __name__ == '__main__':
33     main()

 












转载于:https://www.cnblogs.com/Lin-Yi/p/7338825.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/487813.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

win7 怎么干净删除php,window_win7系统如何删除注册表里面的垃圾文件?,win7系统如何删除注册表里面的 - phpStudy...

win7系统如何删除注册表里面的垃圾文件&#xff1f;win7系统如何删除注册表里面的垃圾文件&#xff1f;在win7系统中我们可以通过删除或修改注册表的垃圾文件&#xff0c;来提高系统的运行速度&#xff0c;但是在删除注册表过程中&#xff0c;如果错误修改的话会导致计算机无法…

不可不看的干货——机器人自主系统的技术构建:感知、决策和执行

来源&#xff1a;机器人大讲堂近年来&#xff0c;随着工业 4.0 标准的不断推进和人工智能、物联网、大数据等技术的快速发展&#xff0c;机器人产业迎来新一轮浪潮&#xff0c;正逐步向系统化、模块化、智能化的方向发展。除了传统的工业机器人外&#xff0c;在特种机器人和服务…

php伪数组转换为数组,JavaScript伪数组用法实例

在Javascript中什么是伪数组&#xff1f;伪数组(类数组)&#xff1a;无法直接调用数组方法或期望length属性有什么特殊的行为&#xff0c;但仍可以对真正数组遍历方法来遍历它们。本文实例讲述了JavaScript伪数组用法&#xff0c;希望能帮助到大家。1.典型的是函数的 argument参…

前端开发神器 vscode 常用快捷键

主命令框 F1 或 CtrlShiftP: 打开命令面板。在打开的输入框内&#xff0c;可以输入任何命令&#xff0c;例如&#xff1a; 按一下 Backspace 会进入到 CtrlP 模式在 CtrlP 下输入 > 可以进入 CtrlShiftP 模式在 CtrlP 窗口下还可以: 直接输入文件名&#xff0c;跳转到文件?…

前沿科技 | 中科院科学家研究揭示奥陶纪末生命大灭绝新机制

来源&#xff1a;中国科学院火山活动是全球气候变化和海洋化学组成巨变的主要驱动力之一&#xff0c;其中“平流层火山喷发”&#xff08;即火山物质喷发至平流层-大约离地表20公里&#xff09;对全球气候有直接的影响。在过去5.4亿年的地质历史中&#xff0c;发生了数次大规模…

php console postman,postman内置脚本说明

.内置脚本说明1. 清除一个全局变量Clear a global variable对应脚本&#xff1a;postman.clearGlobalVariable("variable_key");参数&#xff1a;需要清除的变量的key 2.清除一个环境变量Clear an environment variable对应脚本&#xff1a;postman.clearEnvironmen…

Minimum Path Sum

题目 Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which minimizes the sum of all numbers along its path. Note: You can only move either down or right at any point in time. 方法 从左上方到右下方&#xff0c;仅…

空地通信传输详解——飞机是这样和地面通信的

来源&#xff1a;电子万花筒飞机在空中飞行时是如何与地面联络的呢&#xff1f;飞机在飞行中的数据如何进行空地传输呢&#xff1f;那些部件的数据可以被传输呢&#xff1f;飞机的导航、通信、识别系统主要就是保证飞行的&#xff0c;保障在天上、空对空、空对地、地对空、空对…

win8 oracle10g,win7/win8 下安装oracle10g的方法

我的Oracle 10g版本是10.2.0.1.0&#xff0c;选择高级安装&#xff0c;提示“程序异常终止&#xff0c;发生未知错误”。1.修改Oracle 10G\database\stage\prereq\db\refhost.xml当打开refhost.xml 后会发现有.....只要在 后面添加2.到install目录中找到oraparam.ini文件&#…

​IBM人工智能芯片的新进展

来源&#xff1a;内容由半导体行业观察&#xff08;ID&#xff1a;icbank&#xff09;编译自「Venturebeat」&#xff0c;谢谢。IBM苏黎世实验室的研究人员本周在Nature Communications上发表了一篇论文。在文中他们声称&#xff0c;基于相变存储器的技术&#xff0c;他们已经开…

php程序员写bug,程序员的修炼-我们为什么会编写BUG

在最近的一周,我维护的业务系统出现了很多坏毛病,一周七天crash掉了4次,每次都需要都是因为一点很小的问题,触发了蝴蝶效应,导致整个系统全盘崩溃,于是产生除了叙述本篇的想法,当然这并不是为了掩盖我在Coding上的一些细节处理和职责疏忽&#xff0c;只是为了从根本的细节上去分…

强人工智能和弱人工智能

来源&#xff1a;人机与认知实验室人工智能的一个比较流行的定义&#xff0c;也是该领域较早的定义&#xff0c;是由当时麻省理工学院的约翰麦卡锡在1956年的达特矛斯会议上提出的&#xff08;对此有争议&#xff09;&#xff1a;人工智能就是要让机器的行为看起来就像是人所表…

51Nod - 1183 编辑距离

问题&#xff1a;找出字符串的编辑距离&#xff0c;即把一个字符串s1最少经过多少步操作变成编程字符串s2&#xff0c;操作有三种&#xff0c;添加一个字符&#xff0c;删除一个字符&#xff0c;修改一个字符 解析&#xff1a; 首先定义这样一个函数——edit(i, j)&#xff0c;…

张亚勤2020寄语哥伦比亚大学毕业生:引领未知时代

(哥伦比亚大学巴特勒图书馆&#xff09;2020年5月18日&#xff0c;人工智能和数字视频的世界级科学家和企业家&#xff0c;美国艺术与科学院院士、百度前总裁、清华大学智能科学讲席教授张亚勤博士&#xff0c;在哥伦比亚大学工程学院的毕业典礼上发表了主题演讲。张亚勤说:“面…

oracle跳过undo回滚段启动,[Oracle] 解析在没有备份的情况下undo损坏怎么办

如果Oracle在运行中很不幸遇到undo损坏&#xff0c;当然最好的方法是完全恢复&#xff0c;不过如果没有备份&#xff0c;可以采用一种非常规的手段(利用Oracle的隐藏参数)&#xff0c;如果此时undo包含未提交的事务&#xff0c;会造成一点点的数据丢失(一般都是可忍受的)&#…

String s=hello;s+=world;s变化了吗?原始的String对象的内容变了吗?

分析: String s"hello";s"world"; 引用变量s 一开始指向String对象("hello" :0x001); ("world":0x002); s拼接后,就重新指向String对象("helloworld":0x003); 答:s改变了,原始的String对象 "hello" 内容并没有改变…

科技部部长:基础研究是科技创新“总开关”

来源&#xff1a;中国新闻网中新社北京5月19日电 (记者 孙自法)“基础研究是科技创新的‘总开关’&#xff01;”言及基础研究在中国科技发展、增强原始创新能力中的地位与作用&#xff0c;中国科学技术部部长王志刚这样概括道。国务院新闻办公室19日下午在北京举行加快建设创新…

php评论获取时间,WordPress函数comment_date获取评论发布时间

重要&#xff1a;本文最后更新于2019-01-10 08:41:31&#xff0c;某些文章具有时效性&#xff0c;若有错误或已失效&#xff0c;请在下方留言或联系代码狗。一般来说任何一条信息发布&#xff0c;发布时间就是它的重要组成部分。当评论者在你的WordPress网站发布评论留言时&…

从通用到专用,5G时代IP核的新故事

来源&#xff1a;半导体行业观察如同芯片在不断迭代&#xff0c;IP核也在不断进步。集成电路技术60年来基本遵循摩尔定律的演进规律。随着进入后摩尔时代&#xff0c;即两年一代技术更换的节奏开始放缓&#xff0c;设计和制造企业开始更加重视产品的多样化发展&#xff0c;而不…

连续信号与系统频域分析的matlab实现,实验十三 连续信号与系统频域分析的MATLB实现...

实验十三 连续信号与系统频域分析的MATLB实现 实验十三 连续信号与系统频域分析的 MATLAB 实现70实验十三 连续信号与系统频域分析的 MATLAB 实现一、实验目的 1. 掌握连续时间信号频谱特性的 MATLAB 分析方法&#xff1b;2.掌握连续系统的频率响应 MATLAB 分析方法方法。二、实…