简单模拟题,在人数超过3个以上进行处理。可以队列模拟,也可以直接用数组模拟:将一开始每个人都置为0,当每次计数满足要求时置为1,再重新计数。最后输出数组里为0的编号即可。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main(){
int T;
int a[5005];
scanf("%d",&T);
while(T--){
int n;
scanf("%d",&n);
memset(a,0,sizeof(a));
int num=n,k=2;
while(num>3){
int cnt=0;
for(int i=1;i<=n;i++){
if(!a[i]){
cnt++;
if(cnt==k){
cnt=0;a[i]=1;num--;
}
}
}
k=(k==2?3:2);
}
for(int i=1;i<=n;i++){
if(!a[i]&&i==1){
printf("1");
continue;
}
if(!a[i])
printf(" %d",i);
}
printf("\n");
}
return 0;
}