注意注释处,这个一开始我没注释掉,因为理解错了题意,这个不能加,应为应该是每次喊完一遍再看是不是符合条件(<=3)所以说是有可能小于三的,而不是边淘汰人边判断
#include<stdio.h>
int main(){
int n;
while(~scanf("%d",&n)){
while(n--){
int N;
scanf("%d",&N);
int a[5005]={0};
int tag=3,people=N;
while(people>3){
if(tag==3)tag--;
else tag++;
for(int i=1,j=1;i<=N;i++){
if(a[i-1]==0){
if(j%tag==0){
a[i-1]=1;
people--;
// if(people<=3)
// break;
}
j++;
}
}
}
for(int i=0;i<N;i++)
if(a[i]==0){
if(i==0)
printf("%d",i+1);
else
printf(" %d",i+1);
}
putchar('\n');
}
}
return 0;
}