題意:約瑟夫環。
題解:直接類比了···
#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;}