题意很清楚,但要注意一点,就是判断for循环结束的条件是:
就在在这一轮报完之后,m==3,即可结束。。
#include"stdio.h"
#include"string.h"
int main()
{
int n,m,k,i,s,t;
int a[6000];
scanf("%d",&k);
while(k--)
{
scanf("%d",&n);
for(i=1;i<=n;i++)
a[i]=1;
m=n;
while(m>3)
{
s=0;
for(i=1;i<=n;i++)
{
if(a[i]==1)
{ s++;
if(s==2)
{
a[i]=0;
s=0;
m--;
}
}
}
if(m==3)//判段结束的条件要放在外边。。因为每一轮都要报完。。就在这错了几次。。
break;
t=0;
for(i=1;i<=n;i++)
{
if(a[i]==1)
{ t++;
if(t==3)
{
a[i]=0;
t=0;
m--;
}
}
}
}
for(i=1;i<=n;i++)
if(a[i])
{
printf("%d",i);a[i]=0;
break;
}
for(i=1;i<=n;i++)
if(a[i])
printf(" %d",i);
printf("\n");
}
return 0;
}