开发网站服务器,最近最火的电商平台是哪个,html网站登录界面模板下载,安徽网新网站建设军训队列 题目描述某大学开学进行军训队列训练#xff0c;将学生从一开始按顺序依次编号#xff0c;并排成一行横队#xff0c;训练的规则如下#xff1a;从头开始一至二报数#xff0c;凡报到二的出列剩下的依次向前靠拢#xff0c;再从头开始…军训队列 题目描述某大学开学进行军训队列训练将学生从一开始按顺序依次编号并排成一行横队训练的规则如下从头开始一至二报数凡报到二的出列剩下的依次向前靠拢再从头开始进行一至三报数凡报到三的出列剩下的依次向前靠拢继续从头开始进行一至二报数。。。以后每次从头开始轮流进行一至二报数、一至三报数直到剩下的人数不超过三人为止。输入第一行为组数N接着为N行学生人数学生人数不超过5000。样例输入22040输出输出有N行分别对应输入的学生人数每行输出剩下的学生最初的编号编号之间有一个空格。样例输出1 7 191 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:utf82 #list是当前队列里按顺序排号的编号step是本次要执行1到几报数3 def result(list, step):4 if len(list) 3: #如果不多于3人则应该返回结果5 return list6 res [] #用于存储结果7 if step 2: #如果是1到2报数8 res list[::2] # 把list里的所有报2的人踢出去剩下1 的人存给新列表res9 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