约瑟夫环c++数据结构

 这古罗马史学家Josephus提出的问题。设有N个人围坐一圈,从某个人开始报数,数到M的人出列,接着从出列的下一个人开始重新报数,数到M的人又出列,如此下去,直到所有人都出列为止.试设计确定他们的出列次序序列的程序. 
[实习要求] 选择单向循环链表作为存储结构来模拟整个过程,并依次输入出列的人的编号。开始时可指定总人数N和报数M。开始报数人从键盘输入。

慕标5832272
浏览 400回答 2
2回答

慕桂英4014372

 参考代码:  #include<stdio.h>  #include<stdlib.h>  #include<malloc.h>  typedef struct LNode{  int number;  struct LNode *next;  } LNode,*Linklist;  int main()  {  int M,N;  int i;  Linklist L,r;  printf("Please input two M , N:");  scanf("%d%d",&M,&N);  L = (Linklist)malloc(N * sizeof(struct LNode));  if(L == NULL) printf("Error!\n"),exit(0);  r = L;  for(i = 1;i < N;i++)  {  r->next = L + i;  r->number = i;  r = r->next;  }  r->next = L;  r->number = N;  while(r != r->next)  {  for(i = 0;i < M - 1;i++)  r = r->next;  printf("%4d",r->next->number);  r->next = r->next->next;  }  printf("\n When N = %d and M = %d,Josephus,hiding in position %d survive.\n",N,M,r->number);  free(L);  }
打开App,查看更多内容
随时随地看视频慕课网APP