简单的队列题,一开始以为要用到循环队列,后来发现其实蛮简单,用数组就可以模拟。
思路体现在代码中,很清晰
#include <iostream>
#include<stdio.h>
#include<queue>
using namespace std;
int main()
{
int t,n,m,i,j;
int a[25];
while(scanf("%d%d%d",&t,&n,&m)!=EOF)
{
j=0;
int st=0;
int en=t+1;
if(t==0&&n==0&&!m)
{
break;
}
else
{
for(i=1;i<=t;i++)
a[i]=i;
while(j<t)
{
int n1=n;
int m1=m;
while(1)
{
if(a[++st]==st)
n1--;
if(st>t)
st=0;
if(n1==0)
{
j++;
printf("%3d",a[st]);
break;
}
}
while(1)
{
if(a[--en]==en)
m1--;
if(en<1)
en=t+1;
if(m1==0)
{
if(a[st]!=a[en])
{
printf("%3d",a[en]);
j++;
}
break;
}
}
a[st]=a[en]=0;
if(j<t)
printf(",");
}
printf("\n");
}
}
return 0;
}