题很简单,STL中queue的基本使用。
#include <bits/stdc++.h>
using namespace std;
int N,num;
int main()
{
scanf("%d",&N);
while (N--) {
scanf("%d",&num);
if (num<=3) {
for (int i=1;i<num;i++) {
printf("%d ",i);
}
printf("%d
",num);
continue;
}
queue<int>q;
for (int i=1;i<=num;i++) {
q.push(i);
}
int top=num,cnt=1;
while (true) {
// printf("IN
");
while (cnt<top+1) {
if (cnt%2!=0) {
// printf("%d
",q.front());
q.push(q.front());
}
q.pop();
cnt++;
}
if (q.size()<=3) {
break;
}
// printf("%d
",q.size());
top=q.size();
cnt=1;
while (cnt<top+1) {
if (cnt%3!=0) {
// printf("%d
",q.front());
q.push(q.front());
}
q.pop();
cnt++;
}
if (q.size()<=3) {
break;
}
top=q.size();
cnt=1;
}
while (q.size()>1) {
printf("%d ",q.front());
q.pop();
}
printf("%d
",q.front());
}
return 0;
}