The Dole Queue【紫書例題4.3】
阿新 • • 發佈:2018-12-10
題意:
n個人圍成個圓,從1到n,一個人從1數到k就讓第k個人離場,了另一個人從n開始數,數到m就讓第m個人下去,直到剩下最後一個人,並依次輸出離場人的序號。
水題,直接上標程了
#include<stdio.h> #define maxn 25 int n, k, m, a[maxn]; // 逆時針走t步,步長是d(-1表示順時針走),返回新位置 int go(int p, int d, int t) { while(t--) { do { p = (p+d+n-1) % n + 1; } while(a[p] == 0); // 走到下一個非0數字 } return p; } int main() { while(scanf("%d%d%d", &n, &k, &m) == 3 && n) { for(int i = 1; i <= n; i++) a[i] = i; int left = n; // 還剩下的人數 int p1 = n, p2 = 1; while(left) { p1 = go(p1, 1, k); p2 = go(p2, -1, m); printf("%3d", p1); left--; if(p2 != p1) { printf("%3d", p2); left--; } a[p1] = a[p2] = 0; if(left) printf(","); } printf("\n"); } return 0; }