133 - The Dole Queue

#include<stdio.h>
#include<stdlib.h>
typedef struct queue
{
 int num;
 queue *pre;
 queue *next;
}queue;
int main()
{
int n,k,m;
while(scanf("%d%d%d",&n,&k,&m)!=EOF)
{
    if(n==0&&k==0&&m==0)
        break;
  queue *p,*front,*rear;
  p=(queue*)malloc(sizeof(queue));
  front=p;
  int i;
  for(i=1;i<=n-1;i++)
  {
    queue *point;
   point=(queue*)malloc(sizeof(queue));
   p->next=point;
   p=point;
  }
  rear=p;
  p->next=front;
  queue *p1,*p2;
  p1=front;
  p2=front->next;
   for(i=1;i<=n-1;i++)
   {
    p2->pre=p1;
    p1=p1->next;
    p2=p2->next;
   }
   front->pre=p1;
   p=front;
  for(i=0;i<n;i++)
  {
      p->num=i+1;
      p=p->next;
  }
  int count=0;
  queue *chose1=front->pre;
  queue *chose2=rear->next;
  while(count!=n) 
  {
    p=chose1->next;
    for(i=1;i<=k-1;i++)
          p=p->next;
    chose1=p;
    p=chose2->pre;
    for(i=1;i<=m-1;i++)
          p=p->pre;
    chose2=p;
    if(chose1!=chose2)
    {
        if(count!=n-2)
        printf("%3d%3d,",chose1->num,chose2->num);
        else
        printf("%3d%3d",chose1->num,chose2->num);
        chose1->pre->next=chose1->next;
        chose1->next->pre=chose1->pre;
        if(chose1->next==chose2)
            chose1->next=chose2->next;
        chose2->pre->next=chose2->next;
        chose2->next->pre=chose2->pre;
        count=count+2;
    }
    else
    {    if(count!=n-1)
        printf("%3d,",chose1->num);
        else
           printf("%3d",chose1->num);
        chose1->pre->next=chose1->next;
        chose1->next->pre=chose1->pre;
        count++;
    }
  }
  printf("\n");
}
return 0;
}

 

posted @ 2013-03-31 00:00  sooflow  阅读(122)  评论(0)    收藏  举报