简单模拟,用了两个队列会比较清晰。
输出的时候格式需要稍微注意一下。
最坑的是n等于1,2,3的时候也需要考虑,这个bug纠结了一中午。
以后举例子的时候一定不要想当然,,从最小的数字开始试验才是最吼的。
#include <iostream>
#include <queue>
using namespace std;
queue<int> q1, q2 ;
int main()
{
int N, key;
int n, stop=0, len, a ;
cin >> N ;
while(N--)
{
stop = 0, key = 2 ;
while(!q1.empty())
q1.pop();
while(!q2.empty())
q2.pop();
cin >> n ;
if(n == 2 || n == 3 )
stop = 1 ;
for(int i = 1 ; i <= n ; i++)
q1.push(i) ;
while(stop!=1)
{
if(key == 2)
{
len = q1.size();
for(int i = 1 ; i <= len ; i++)
{
if(i%2!=0)
{
a = q1.front() ;
q1.pop() ;
q2.push(a) ;
}
else
q1.pop() ;
}
key = 3 ;
if(q2.size() <= 3)
stop = 1 ;
}
else
{
len = q2.size();
for(int i = 1 ; i <= len ; i++)
{
if(i%3!=0)
{
a = q2.front() ;
q2.pop() ;
q1.push(a) ;
}
else
q2.pop() ;
}
key = 2 ;
if(q1.size() <= 3)
stop = 1 ;
}
}
if(key == 3)
{
cout << q2.front() ;
q2.pop() ;
while(!q2.empty())
{
cout << " " << q2.front() ;
q2.pop() ;
}
}
else
{
cout << q1.front() ;
q1.pop() ;
while(!q1.empty())
{
cout << " " << q1.front() ;
q1.pop() ;
}
}
cout << endl ;
}
return 0;
}