UVA 133 The Dole Queue
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<vector>
#include<queue>
#include<set>
using namespace std;
const int MAXN=25;
bool a[MAXN];
int main()
{
int n, i, j, p, q,k, m, sum;
while(scanf("%d%d%d",&n,&k,&m)!=EOF)
{
if(n==0&&k==0&&m==0) break;
sum=0;
memset(a,0,sizeof(a));
i=1, j=n;
while(sum<n)
{
p=q=0;
if(sum) printf(",");
for(;;i++)
{
if(i==n+1) i=1;
if(!a[i]) p++;
if(p==k) break;
}
for(;;j--)
{
if(j==0) j=n;
if(!a[j]) q++;
if(q==m) break;
}
if(i==j)
{
sum++;
printf("%3d",i);
a[i]=true;
}
else
{
sum+=2;
printf("%3d%3d",i,j);
a[i]=a[j]=true;
}
i++, j--;
}
puts("");
}
return 0;
}纯模拟题,两个人从队伍的两头同时数,分别数到第K个和第M个就使此两人同时出列,若数到同一人,则此人也出列,然后继续往下数,整个队列是循环的,直到所有人都出列,输出出列顺序,注意格式。
浙公网安备 33010602011771号