#pragma warning(disable:4996)
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<vector>
#include<algorithm>
#include<iostream>
#include<time.h>
#include<map>
#include<set>
#include<sstream>
#include<cassert>
using namespace std;
const int INF = 0x3f3f3f3f;
int main()
{
int n, k, m;
int person[30];
while (cin >> n >> k >> m, n || k || m)
{
person[0] = 0;
int flag;
for (int i = 1;i <= n;i++)
person[i] = i;
if (n % 2 == 0)
flag = 0;
else
flag = 1;
int temp1 = 0;
int temp2 = 1;
int temp3 = n;
while (temp3)
{
int tmp1 = k, tmp2 = m;
while (tmp1--)
{
temp1++;
if (temp1 == n+1)
temp1 = n+2;
temp1 %= n+1;
if (person[temp1] == 0)
tmp1++;
}
temp3--;
printf("%3d", person[temp1]);
while (tmp2--)
{
temp2--;
if (temp2 == 0)
temp2 = n;
if (person[temp2] == 0)
tmp2++;
}
person[temp1] = 0;
if (temp2 != temp1)
{
printf("%3d", person[temp2]);
temp3--;
person[temp2] = 0;
}
if (temp3)
cout << ",";
}
cout << endl;
}
return 0;
}
刘汝佳的
#pragma warning(disable:4996)
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<vector>
#include<algorithm>
#include<iostream>
#include<time.h>
#include<map>
#include<set>
#include<sstream>
#include<cassert>
using namespace std;
const int INF = 0x3f3f3f3f;
#define maxn 25
int n, k, m, a[maxn];
int go(int p, int d, int t)
{
while (t--)
{
do
{
p = (p + d + n - 1) % n + 1;
} while (a[p] == 0);
}
return p;
}
int main()
{
while (scanf("%d%d%d", &n, &k, &m) == 3&&n)
{
for (int i = 1;i <= n;i++)
a[i] = i;
int left = n;
int p1 = n, p2 = 1;
while (left)
{
p1 = go(p1, 1, k);
p2 = go(p2, -1, m);
printf("%3d", p1);
left--;
if (p2 != p1)
{
printf("%3d", p2);
left--;
}
a[p1] = a[p2] = 0;
if (left)
printf(",");
}
printf("\n");
}
return 0;
}