#include #define maxn 25 //n(n<20)个人站成一圈,说好的开大一点,为啥一下就到25了? //官员A数k个就停下来 int k; //官员B数m个就停下来 int m; //n(n<20)个人站成一圈,逆时针编号为1~n int n; //标识为0表示离开了~ int a[maxn]; //从p这个位置开始,(1表示是逆时针走,-1表示顺时针走),走t步 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) { //初始化,放过第一个0,不用 for (int i = 1; i <= n; i++) a[i] = i; int left = n; //还剩下的人数 //p1,p2相当于指针,对准一前一后,准备开始~ int p1 = n, p2 = 1; //如果还有人剩下 while (left) { //正向走K个 p1 = go(p1, 1, k); //逆向走M个 p2 = go(p2, -1, m); printf("%3d", p1); //printf("%3d",c)表示域宽为3,即输出3位 //最少有一个人出局了 left--; //如果一前一后都指向了不是同一个人 if (p2 != p1) { printf("%3d", p2); left--; } //标识这两个人都是出局了~ a[p1] = a[p2] = 0; //如果还有剩余的人员,输出逗号 if (left) printf(","); } printf("\n"); } return 0; }