题意:约瑟夫环。
题解:直接模拟了···
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
struct NODE
{
int id;
NODE *next, *pre;
};
NODE node[10009];
void build_list ( int n )
{
for ( int i = 2; i < n; i++ )
{
node[i].id = i;
node[i].pre = &node[i-1];
node[i].next = &node[i+1];
}
node[1].id = 1;
node[1].next = &node[2];
node[1].pre = &node[n];
node[n].id = n;
node[n].next = &node[1];
node[n].pre = &node[n-1];
}
int play ( int n, int k, int m )
{
NODE *p;
node[m].pre->next = node[m].next;
node[m].next->pre = node[m].pre;
p = &node[m];
int cnt = n - 1, tmp;
while ( cnt > 1 )
{
tmp = k % cnt;
if ( tmp == 0 ) tmp = cnt;
for ( int i = 1; i <= tmp; i++ )
p = p->next;
p->pre->next = p->next;
p->next->pre = p->pre;
cnt--;
}
return p->next->id;
}
int main()
{
int n, k, m;
while ( scanf("%d%d%d",&n,&k,&m) )
{
if ( !n && !k && !m ) break;
build_list(n);
printf("%d\n",play(n,k,m));
}
return 0;
}