新兵队列训练 - Python 解题思路及代码实现
本题描述了新兵进行队列训练,根据规则不断出列,最后输出剩下新兵的初始编号。
题目分析
- 理解题意:新兵按照规则进行报数,报到指定数字的出列,剩余人员靠拢,直到人数不超过3人。
- 关键点:
- 编号间隔:指的是每个新兵编号之间有一个空格。
- 循环报数:轮流进行1至2报数、1至3报数。
- 靠拢:出列后,剩余人员向小序号方向靠拢,保持编号连续。
解题思路
- 使用列表模拟新兵队列,每个元素代表一个新兵的初始编号。
- 根据报数规则,循环遍历列表,判断是否需要出列。
- 如果需要出列,则删除对应元素,并将后面的元素前移,保持编号连续。
- 循环执行报数和出列操作,直到人数不超过3人。
- 输出剩余新兵的初始编号,每个编号之间用空格隔开。
Python 代码实现
def new_soldier_queue(n):
for i in range(n):
soldier_num = int(input())
soldiers = list(range(1, soldier_num + 1))
round_num = 1
while len(soldiers) > 3:
count = 1
temp = []
for j in range(len(soldiers)):
if count == round_num:
count = 1
round_num += 1
else:
temp.append(soldiers[j])
count += 1
soldiers = temp
print(*soldiers, sep=' ')
# 输入测试数据组数
n = int(input())
new_soldier_queue(n)
代码解释
new_soldier_queue(n)函数用于处理所有测试数据组。soldiers列表存储新兵的初始编号。round_num记录当前报数轮数,初始值为1。count用于计数,每报一个数字,计数加1。temp列表用于存储未出列的新兵编号。while循环用于判断是否结束报数。for循环模拟报数过程,判断是否出列。print(*soldiers, sep=' ')用于输出剩余新兵编号,使用星号解包列表,用空格隔开每个编号。
举例说明
假设输入的新兵人数为5,则输出结果为:
1 2 3 4 5
总结
本文详细介绍了新兵队列训练的题目解析和 Python 代码实现,希望能够帮助您更好地理解和解决此类算法问题。
原文地址: https://www.cveoy.top/t/topic/qbMl 著作权归作者所有。请勿转载和采集!