首页 > 代码库 > 第四章习题

第四章习题

 

 

例题4-3

 1 #include<stdio.h>
 2 
 3 #define maxn 25
 4 int n, k, m, a[maxn];
 5 
 6 int go(int p,int d,int t)
 7 {
 8     while(t--)
 9     {
10         do
11         {
12             
13             p = (p+d-1+n) % n+1 ;
14 
15         }while(a[p]==0);
16     }
17 
18     printf("(%d %d)\n",p,d);
19 
20     return p;
21 }
22 
23 int main()
24 {
25     while(scanf("%d%d%d", &n, &k, &m) == 3 && n) 
26     {
27         for(int i = 1; i <= n; i++) 
28             a[i] = i;
29         int left = n; //还剩下的人数
30         int p1 = n, p2 = 1;
31         while(left) 
32         {
33             p1 = go(p1, 1, k);
34             p2 = go(p2, -1, m);
35             printf("%3d", p1); 
36             left--;
37             if(p2 != p1) 
38             {
39                  printf("%3d", p2); left--;
40             }
41             a[p1] = a[p2] = 0;
42             if(left) 
43                 printf(",");
44         }
45         printf("\n");
46         }
47         return 0;
48 }

这里最要注意的是13行的移动一位的操作,p = (p+d-1+n) % n+1 是为了在1-n 之间循环 如果是在0 -n 之间循环应该写为 p=(p+d+n)%n

 

第四章习题