首页 > 试题广场 >

围圈报数

[编程题]围圈报数
  • 热度指数:6563 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
N 个人围成一圈顺序编号,从1 号开始按1、2、3 顺序报数,报3 者退出圈外,其余的人再从1、2、3 开始报数,报3 的人再退出圈外,依次类推。请按退出顺序输出每个退出人的原序号。要求使用环行链表编程。

输入描述:
输入第一行为整数m表示有m组测试数据,接下来m行每行一个整数N,N不超过50。


输出描述:
输出m行,每行表示题目所求,用空格隔开。
示例1

输入

1
4

输出

3 2 4 1

Python实现

class ListNode(object):
    def __init__(self, x):
        self.x = x
        self.next = None


for _ in range(int(input())):
    num = int(input())
    head = ListNode(1)
    temp = head
    for i in range(2, num + 1):
        temp.next = ListNode(i)
        temp = temp.next
    temp.next = head
    temp = head
    res = []
    while temp.x != temp.next.x:
        temp = temp.next
        res.append(temp.next.x)
        temp.next = temp.next.next
        temp = temp.next
    res.append(temp.x)
    print(' '.join(map(str, res)))
发表于 2019-02-27 11:23:01 回复(0)

问题信息

上传者:小小
难度:
1条回答 6427浏览

热门推荐

通过挑战的用户

查看代码
围圈报数