#include <stdio.h>
#include <stdlib.h>
#include <string.h>
static int find_next(int *tag, int num, int cur_pos, int step, int ope_kind)
{
int divider = num + 1;
int acc = 0;
int ind = (cur_pos + ope_kind + num - 1) % num + 1;
while(1)
{
if(tag[ind] == 0)
acc++;
if(acc < step)
{
ind = (ind + ope_kind + num - 1)% num + 1;
//ind = (ind == 0)?num:ind;
}
else
return ind;
}
}
int main()
{
int n, k, m;
int *tag = NULL;
while(scanf("%d%d%d", &n, &k, &m) == 3)
{
if(n == 0 && k == 0 && m == 0)
return 0;
tag = (int*)malloc(sizeof(int) * (n+1));
memset(tag, 0, sizeof(int) * (n + 1));
int clockwise = n;
int counter_clockwise = 1; // (n - m + 1) % n;
int left = n;
while(1)
{
clockwise = find_next(tag, n, clockwise, k, 1);
counter_clockwise = find_next(tag, n, counter_clockwise, m, -1);
if(clockwise != counter_clockwise)
{
printf("%3d%3d", clockwise, counter_clockwise);
tag[clockwise] = 1;
tag[counter_clockwise] = 1;
left -= 2;
}
else
{
printf("%3d", clockwise);
tag[counter_clockwise] = 1;
left--;
}
if(left > 0)
printf(",");
else
{
printf("\n");
break;
}
}
free(tag);
}
return 0;
}
UVa: 133
最新推荐文章于 2020-02-15 19:28:22 发布