(相关资料图)
1、约瑟夫问题:Joseph问题的一种描述是:编号为2、……、n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。
2、一开始任选一个正整数作为报数上限值m,从第一个人开始顺时针方向自1开始顺序报数,报到m时停止报数,报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。
3、2、例程:#include#includetypedefintElemType;typedefstructLNode{ElemTypedata;intnum;structLNode*next;}LNode,*LinkList;voidCreateList_L(LinkList*L,intn){inti=0;ElemTypee;LinkListp,q;*L=(LinkList)malloc(sizeof(LNode));(*L)->next=NULL;(*L)->data=n;q=*L;while(idata=e;p->num=i+1;p->next=NULL;q->next=p;q=p;i++;}p->next=(*L)->next;}voidPrintList(LinkListL){inti=0;LinkListp;p=L->next;while(idata){printf("%5d",p->data);p=p->next;i++;}printf("");}voidPut(LinkList*L){inti,m;LinkListp,q;printf("inputanumber:");scanf("%d",&m);q=(*L)->next;while((*L)->data){for(i=0;inext;}printf("%5d",q->num);m=q->data;p->next=q->next;free(q);q=p->next;(*L)->data=(*L)->data-1;}}voidmain(){LinkListL;inta;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
本文分享完毕,希望对大家有所帮助。