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个就使此两人同时出列,若数到同一人,则此人也出列,然后继续往下数,整个队列是循环的,直到所有人都出列,输出出列顺序,注意格式。