题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1276
可以用数组模拟水过,不过还是建议用队列写
废话不多说了,talk is cheap,show your code
#include<iostream>
#include<queue>
using namespace std;
queue<int>q;
void paidui(int n)
{
for(int i=1;i<=n;i++)
q.push(i);
while(1)
{
if(q.size()<=3)
break;
q.push(1);
q.pop();
for(int i=2;q.front()!=1;i++)
{
if(i%2)
{
int tp=q.front();
q.push(tp);
} q.pop();
}
if(q.size()<=3)
break;
q.push(1);
q.pop();
for(int i=2;q.front()!=1;i++)
{
if(i%3)
{
int tp=q.front();
q.push(tp);
}
q.pop();
}
}
}
int main(void)
{
int cas,n,i;
scanf("%d",&cas);
while(cas--)
{
scanf("%d",&n);
paidui(n);
while(!q.empty())
{
printf("%d%c",q.front(),q.size()>1?' ':'\n');
q.pop();
}
}
return 0;
}