双向约瑟夫环吗,很简单直接模拟就行了
#include <stdio.h>
int n , k , m , a[25];
int solve1(int p) {
int t = m;
while(t--) {
p = ((p + n - 2) % n) + 1;
while(a[p] == 0)
p = ((p + n - 2) % n) + 1;
}
return p;
}
int solve2(int p) {
int t = k;
while(t--) {
p = ((p + n) % n) + 1;
while(a[p] == 0)
p = ((p + n) % n) + 1;
}
return p;
}
int main() {
while(~scanf("%d %d %d",&n,&k,&m) && n) {
for(int i = 1; i <= n; i++) a[i] = i;
int s = n;
int B = n , A = 1;//A ni , B shun
while(s) {
A = solve1(A);//p2
B = solve2(B);//p1
printf("%3d",B);s--;
if(A != B) {
printf("%3d",A);
s--;
}
a[A] = a[B] = 0;
if(s) printf(",");
}
printf("\n");
}
return 0;
}