//你要知道 苦尽甘来 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #include <time.h> #include <ctype.h> #include <queue> #include <stack> #include <vector> #include <algorithm> #include <iostream> using namespace std; int n, k, m; int a[25] = {0}; int go(int p, int d, int t) { while(t--) { do{ p = (p + d + n - 1) % n + 1; //乍一看似乎可以(p + d) % n //但你要体谅d有时为负 //怎么把1流畅的切换成10 //只能这么写了 }while(a[p] == 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;//指针 细节 狗官A从1开始 数但是我们给的起点是n 后移了一位 int 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; }