例题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
时间: 2024-10-13 12:11:54