
大家好,乐乐来为大家解答以下的问题,关于约瑟夫问题c语言代码数组,约瑟夫问题c语言这个很多人还不知道,那么今天让乐乐带着大家一起来看看吧!
约瑟夫问题:Joseph问题的一种描述是:编号为2、……、n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。
一开始任选一个正整数作为报数上限值m,从第一个人开始顺时针方向自1开始顺序报数,报到m时停止报数,报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。
2、例程:#include #include typedef int ElemType;typedef struct LNode{ElemType data;int num;struct LNode *next;}LNode,*LinkList;void CreateList_L(LinkList *L,int n){ int i=0;ElemType e;LinkList p,q;*L=(LinkList)malloc(sizeof(LNode));(*L)-> next=NULL;(*L)-> data=n;q=*L;while(i data=e;p-> num=i+1;p-> next=NULL;q-> next=p;q=p;i++;}p-> next=(*L)-> next;}void PrintList(LinkList L){ int i=0;LinkList p;p=L-> next;while(i data){printf("%5d",p-> data);p=p-> next;i++;}printf("");}void Put(LinkList *L){ int i,m;LinkList p,q;printf("input a number:");scanf("%d",&m);q=(*L)-> next;while((*L)-> data){for(i=0;i next;}printf("%5d",q-> num);m=q-> data;p-> next=q-> next;free(q);q=p-> next;(*L)-> data=(*L)-> data-1;}}void main(){LinkList L;int a;printf("请输入人数:");scanf("%d",&a);printf("请输入密码:");CreateList_L(&L,a);printf("您输入的数字为:");PrintList(L);Put(&L);}#includeint main(){ int n,m; int a[300]; int i,j,k; for(;;) { scanf("%d %d",&n,&m); if(n==0)break; for(i=0;i本文分享到此完毕,希望对您有所帮助。