题目链接:https://vjudge.net/problem/HDU-1276
#include<bits/stdc++.h>
using namespace std;
list<int> a;
list<int>::iterator it;//套话
int N,n;
int main(){
scanf("%d",&N);
while(N--){
scanf("%d",&n);
a.clear();//先清空,类似于数组memset用法
int k=2;//先1 2报数
for(int i=1;i<=n;i++){
a.push_back(i);//将数据全部入list
}
while(a.size()>3){
int cnt=1;
for(it=a.begin();it!=a.end();){
if(cnt++%k==0){
it=a.erase(it);//将有特征的人出队
}
else{
it++;
}
}
k=(k==2?3:2);//2 3更替
}
for(it=a.begin();it!=a.end();it++){
if(it!=a.begin()) printf(" ");
printf("%d",*it);
}
printf("\n");
}
return 0;
}