分类：电脑/网络-程序设计-C/C++
问题：设有n个人围成一圈，每个人的编号依次1,2,3...n。现从编号? 
设有n个人围成一圈，每个人的编号依次1,2,3...n。现从编号为k的人开始报数, 报到m的人出列,再从出列的下一个人开始重新报数,报到m的人又出列,以此类推，直到所有人都出列,求这n个人的出列顺序. 用编写算法,将结果以顺序表和单链表两种方法分别实现注意:这种约瑟夫问题没有所谓的"输入密码"! 
回答：#include<std.h> #include<stdlib.h>typedef struct list { int data; struct list *next; }linklist; void main() { int n,m,k,i=1; linklist head,*p,*q,*l; printf("enter n:\n"); scanf("%d",&n); printf("enter m:\n",&m); scanf("%d",&m); printf("enter k:\n",&k); scanf("%d",&k); l=&head; p=l; for(;i<=n;i++) { q=(linklist *)malloc(sizeof(head)); p->next=q; q->data=i; p=q; } p->next=l->next; /*创建循环表*/ p=l->next; for(i=1;i<m;i++) /*找到m的位置*/ p=p->next; while(p->data!=p->next->data) { for(i=1;i<k-1;i++) p=p->next; q=p->next; printf("%3d",q->data); p->next=q->next; p=q->next; /*p指向第k+1个人的位置*/ free(q); /*释放空间*/ } printf("%3d\n",p->data); free(l); free(p); }