某部队进行新兵队列训练将新兵从一开始按顺序依次编号并排成一行横队训练的规则如下:从头开始1至2报数凡报到2的出列剩下的向小序号方向靠拢再从头开始进行1至3报数凡报到3的出列剩下的向小序号方向靠拢继续从头开始进行1至2报数······以后从头开始轮流进行1至2报数、1至3报数直到剩下的人数不超过三人为止。输入本题有多个测试数据组第一行为组数N接着为N行新兵人数新兵人数不超过10000。输出共有N行分
你可以使用Python的列表来实现链表。具体的实现思路如下:
-
首先根据输入的新兵人数创建一个初始编号列表,编号从1到新兵人数。
-
创建一个变量count,初始化为1,表示当前报数。
-
创建一个变量index,初始化为0,表示当前队列中人的索引。
-
创建一个空列表result,用来存放剩下的新兵的最初编号。
-
使用while循环,直到队列中的人数不超过三人。
-
在循环中,根据count的值进行报数判断:
-
如果count为2,则将队列中索引为index的人移出队列,并将index减1。
-
如果count为3,则将队列中索引为index的人移出队列,并将index减1。
-
其他情况下,将index加1,使队列向小序号方向靠拢。
-
将count加1,如果count大于3,则将count重置为1。
-
-
循环结束后,将剩下的新兵最初的编号添加到result列表中。
-
输出result列表。
下面是具体的代码实现:
N = int(input()) # 输入测试数据组数
for _ in range(N):
num = int(input()) # 输入新兵人数
queue = list(range(1, num + 1)) # 创建初始编号列表
count = 1
index = 0
result = []
while len(queue) > 3:
if count == 2:
queue.pop(index)
index -= 1
elif count == 3:
queue.pop(index)
index -= 1
else:
index += 1
count += 1
if count > 3:
count = 1
result.extend(queue) # 将剩下的新兵最初的编号添加到result列表中
print(' '.join(map(str, result))) # 输出result列表
注意,这里使用了map(str, result)将result列表中的元素转换为字符串,然后使用' '.join()将它们连接起来,并以空格分隔。这样输出时,每个编号之间会有一个空格
原文地址: https://www.cveoy.top/t/topic/iDux 著作权归作者所有。请勿转载和采集!