类似约瑟夫问题模拟
#include <iostream>
#include <sstream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
#include <vector>
#include <set>
#include <cctype>
#include <algorithm>
#include <cmath>
#include <deque>
#include <map>
#include <iomanip>
using namespace std;
///
#define INF 0xffffff7
#define maxn 200
///
int vis[maxn];
int N, k, m;
int main()
{ ///
int i, j;
int startposk, startposm;
while (1)
{
cin >> N >> k >> m;
if (N + k + m == 0)
break;
memset(vis, 0, sizeof(vis));
int cnt(N);
/*
while (k >= N)
{
k -= N;
}
while (m >= N)
{
m -= N;
}
*/
startposk = 0;
startposm = N - 1;
while(cnt > 0)
{
while (vis[startposk])
{
startposk++;
startposk %= N;
}
for (i = 0; i < k - 1; i++)
{
j = 1;
while (vis[(startposk + j) % N])
{
j++;
}
startposk = (startposk + j) % N;
}
while (vis[startposm])
{
startposm--;
startposm = (startposm + N) % N;
}
for (i = 0; i < m - 1; i++)
{
j = 1;
while (vis[(startposm - j + N) % N])
{
j++;
}
startposm = (startposm - j + N) % N;
}
vis[startposk] = vis[startposm] = true;
if (startposm == startposk)
cnt -= 1;
else
cnt -= 2;
if (startposk + 1 >= 10)
{
if (startposm + 1 >= 10)
{
if (startposk == startposm)
cout << " " << startposm + 1;
else
cout << " " << startposk + 1 << " " << startposm + 1;
}
else
cout << " " << startposk + 1 << " " << startposm + 1;
}
else
{
if (startposm + 1 >= 10)
{
cout << " " << startposk + 1 << " " << startposm + 1;
}
else
{
if (startposm == startposk)
cout << " " << startposk + 1;
else
cout << " " << startposk + 1 << " " << startposm + 1;
}
}
if (cnt > 0)
{
cout << ",";
}
}
cout << endl;
}
///
return 0;
}