原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1276
分析:用一个变量K记录报的数,满足条件则移出队列就好
我的代码:
#include<stdio.h>
#include<string.h>
int ans[5005];
int n;
void Solve(int end,int &tot)
{
int k=0;
int i;
for(i=1;i<=n;i++)
{
if(ans[i]) k++;
if(k==end)
{
k=0;
ans[i]=0;
tot--;
}
}
}
int main()
{
// freopen("in.txt","r",stdin);
int i,t;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
int tot=n;
memset(ans,0,sizeof(ans));
for(i=1;i<=n;i++) ans[i]=1;
bool flag=true;
while(tot>3)
{
if(flag)
{
Solve(2,tot);
flag=false;
}
else
{
Solve(3,tot);
flag=true;
}
}
for(i=1;i<=n;i++) if(ans[i])
{
printf("%d",i);
break;
}
for(i+=1;i<=n;i++) if(ans[i]) printf(" %d",i);
printf("\n");
}
return 0;
}
总结:第一次交代码时忘了注释freopen....