沿用前一个题的思路:
用left记录剩下的点,直到全部选完。
这里我的问题是,我一直pos = (pos + f + n)%n,这里的问题是对于B点来说,开始的位置是1,就成了(1+(-1) +n) %n 是0,位置是从1开始记录的,所以应该是(pos + f + n - 1) %n + 1;
#include <stdio.h> #define maxn 25 int n,k,m; int a[maxn]; int go (int pos ,int f,int t) { while(t--) { do { pos = (pos+f+n-1)%n+1; }while(a[pos]==0); } return pos; } int main() { while(scanf("%d%d%d",&n,&k,&m),n) { for(int i=1;i<=n;i++) a[i] = i; int pos1 = n; int pos2 = 1; int left = n; while(left) { pos1 = go(pos1,1,k); pos2 = go(pos2,-1,m); printf("%3d",pos1); a[pos1] = 0; left--; if(pos1!=pos2) { printf("%3d",pos2); a[pos2] = 0; left --; } if(left) printf(","); } puts(""); } return 0; }