UVA 133 The Dole Queue

思路:用数组存编号,用0表示离开的人,数的时候跳过。

 1 #include "stdio.h"
 2 #include "string.h"
 3 int n,m,k,a[25];
 4 
 5 int go(int p,int d,int t)
 6 {
 7     while(t--)
 8     {
 9         do{
10             p=(p+d+n-1)%n+1;//不这样会得出0,比如10 1 1,会得到p=0,但是a[0]=0,会重复return p=9;
11         }
12         while(a[p]==0);
13     }
14     return p;
15 }
16 
17 int main()
18 {
19     while(scanf("%d%d%d",&n,&k,&m)==3&&n)
20     {
21         for(int i=1;i<=n;i++)
22             a[i]=i;
23         int left=n;
24         int p1=n,p2=1;
25         //p1是A,p2是B,那为什么p1是n而不是题目说的1呢???
26         //因为它说了,A数到k停下来,如果是10 4 3,
27         //从1:得到5,而从n才是得到4,所以其实是从n开始
28         while(left)
29         {
30              p1=go(p1,1,k);
31              p2=go(p2,-1,m);
32              printf("%3d",p1);
33              left--;
34              if(p1!=p2)
35              {
36                  printf("%3d",p2);
37                  left--;
38              }
39              a[p1]=a[p2]=0;
40              if(left)
41                 printf(",");
42         }
43         printf("\n");
44     }
45     return 0;
46 }

 

posted @ 2019-01-22 18:16  付玬熙  阅读(106)  评论(0编辑  收藏  举报