就是一个例如约瑟夫环的问题
#include <stdio.h>
#include <string.h>
bool vis[30];
int a[30],n;
bool empty()
{
int i;
for(i = 0;i<n;i++)
{
if(vis[i] != true)
return false;
}
return true;
}
int main()
{
int k,m,i;
while(~scanf("%d%d%d",&n,&k,&m))
{
if(n+k+m == 0)
break;
memset(vis,false,sizeof(vis));
for(i = 0;i<n;i++)
a[i] = i+1;
int x = 0,y = n-1,l_x = 0,l_y = 0;
int flag = 1;
while(!empty())
{
while(1)
{
if(!vis[x]) l_x++;
if(l_x == k)
break;
x++;
if(x>n-1)
x = 0;
}
while(1)
{
if(!vis[y]) l_y++;
if(l_y == m)
break;
y--;
if(y<0)
y = n-1;
}
l_x = l_y = 0;
vis[x] = vis[y] = true;
if(flag)
flag = 0;
else
printf(",");
printf("%3d",x+1);
if(x!=y)
printf("%3d",y+1);
}
printf("\n");
}
return 0;
}