本题描述了新兵进行队列训练,根据规则不断出列,最后输出剩下新兵的初始编号。

题目分析

  1. 理解题意:新兵按照规则进行报数,报到指定数字的出列,剩余人员靠拢,直到人数不超过3人。
  2. 关键点:
    • 编号间隔:指的是每个新兵编号之间有一个空格。
    • 循环报数:轮流进行1至2报数、1至3报数。
    • 靠拢:出列后,剩余人员向小序号方向靠拢,保持编号连续。

解题思路

  1. 使用列表模拟新兵队列,每个元素代表一个新兵的初始编号。
  2. 根据报数规则,循环遍历列表,判断是否需要出列。
  3. 如果需要出列,则删除对应元素,并将后面的元素前移,保持编号连续。
  4. 循环执行报数和出列操作,直到人数不超过3人。
  5. 输出剩余新兵的初始编号,每个编号之间用空格隔开。

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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录