#include<bits/stdc++.h> using namespace std; // N 个人围成一圈顺序编号,从1 号开始按1、2、3 顺序报数,报3者退出圈外,其余的人再从1、2、3 开始报数,报3 的人再退出圈外,依次类推。 // 请按退出顺序输出每个退出人的原序号。要求使用环行链表编程。 struct Node { int num; Node *next; }; void quit(Node* &pre) { if (pre->next == pre) { printf("%d ", pre->num); return; } Node *t = pre->next; pre->next = t->next; printf("%d ", t->num); delete t; return; } int main() { int n, m; cin >> m; for (int j = 0; j < m; j++) { cin >> n; Node *head = new Node; head->num = 1; Node *tmp = head; for (int i = 2; i <= n; i++) { tmp->next = new Node; tmp = tmp->next; tmp->num = i; } tmp->next = head; while (tmp->next != tmp) { for (int i = 0; i < 2; i++) { tmp = tmp->next; } quit(tmp); } printf("%d\n", tmp->num); } }