题意是有一个环,从编号1开始顺时针取第k个,从编号n开始逆时针取第m个,若每次取的数字相同则只输出一个,输出取得顺序。
代码:
#include <cstdio>
using namespace std;
int main()
{
#ifdef LOCAL
freopen("in.txt", "r", stdin);
#endif // LOCAL
int n, k, m;
while (scanf("%d%d%d", &n, &k, &m) == 3)
{
if (n == 0 && k == 0 && m == 0)
break;
bool flag = true;
int a[25];
for (int i = 0; i < n; i++)
a[i] = i + 1;
int p = n - 1, q = 0;
int size = n;
while (size > 0)
{
for (int cnt = 0; cnt < k;)
{
p = (p + 1) % n;
if (a[p])
cnt++;
}
for (int cnt = 0; cnt < m;)
{
q = (q + n - 1) % n;
if (a[q])
cnt++;
}
if (flag)
flag = false;
else
printf(",");
if (p == q)
{
printf("%3d", a[p]);
a[p] = 0;
size--;
}
else
{
printf("%3d%3d", a[p], a[q]);
a[p] = a[q] = 0;
size -= 2;
}
}
printf("\n");
}
return 0;
}