数据结构的里约瑟夫环的一种简单有效的算法: #include "stdio.h" #include "stdlib.h" struct circle... { int ID; struct circle* next;} ;int main(int argc, char* argv[])... { int n,m,i; scanf("%d %d", &n, &m); struct circle* start=(struct circle*)malloc(sizeof(struct circle*)); struct circle* c; int person = n; start->ID=1; c=start; for(i=1;i<=n;i++) ...{ c->next=(struct circle*)malloc(sizeof(struct circle*)); c->next->ID=i+1; if(i==n) c->next=start; else c=c->next; } while((c!=c->next)) ...{ for(i=1;i<=m;i++) ...{ if(i==m) ...{ person--; c->next=c->next->next; } else ...{ c=c->next; } } } do ...{ printf("%d ", c->ID); c=c->next; person--; } while(c!=c->next ); putchar(''); return 0;} 约瑟夫环所描述的是:N个人围成一圈由1-N编队由1-M连续报数,当某人报到M时,该人出队,从下一个人开始由1-M继续报数,并不断重复此过程,直到所剩人数不足M时停止。