迴圈鍊錶解決約瑟夫環問題

2021-09-06 02:39:42 字數 1055 閱讀 9414

問題描述:假設有n個小孩按照序號1,2,,,n圍坐成一圈,從第乙個小孩開始報數,每次報到n的人退出,接著從下乙個人重新開始從1開始報數,下一次再報到n的人退出,求最後乙個留下的人;

小孩的個數n,和報數的n由鍵盤輸入;輸出留下人的序號

乙個迴圈鍊錶都寫得除出了很多問題,改了半天才出來;

#include

#include //包含malloc()

void main()

; struct c_list *head,*p1,*p2;//定義了指標,還沒有分配空間

printf("請輸入約瑟夫環的大小n\n");

scanf("%d",&n);

printf("請輸入每次的報號數n:\n");

scanf("%d",&n);

//迴圈鍊錶的生成1

/* for(int i = 1; i <= n; i++)

else if(i < n)

else }

*/ //迴圈鍊錶的生成2

head = p1 = (struct c_list *)malloc(sizeof(struct c_list));

(*head).num = (*p1).num = 1;

for(int i = 2; i <= n; i++)

p1->next = head;//將帶鍊錶首尾連起來生成迴圈鍊錶

//對鍊錶的遍歷,刪除節點的過程

if(n == 1) printf("最後剩下的乙個人的序號是:\n%d\n",(*p1).num);

else

head->next = head->next->next;

head = head->next;

/* head->next->next = head->next->next->next;

head = head->next->next;最初寫的報3的***/

count++;

} printf("最後剩下的乙個人的序號是:\n%d\n",(*head).num);

} }

迴圈鍊錶解決約瑟夫環問題

題目要求的約瑟夫環操作 編號是1,2,n的n個人按照順時針方向圍坐一圈,每個人只有乙個密碼 正整數 一開始任選乙個正整數作為報數上限值m,從第乙個仍開始順時針方向自1開始順序報數,報到m時停止報數。報m的人出列,將他的密碼作為新的m值,從他在順時針方向的下乙個人開始重新從1報數,如此下去,直到所有人...

迴圈鍊錶解決約瑟夫環問題

約瑟夫環問題可以簡單的使用陣列的方式實現,但是現在我使用迴圈鍊錶的方法來實現,因為上午看到一道面試題規定使用迴圈鍊錶解決約瑟夫環問題。什麼是約瑟夫環?這道面試題考察了迴圈鍊錶的 建立 遍歷 和 刪除 建立的迴圈鍊錶的結構圖 解決約瑟夫環問題的過程 c 實現 如下 1 迴圈鍊錶解決約瑟夫環問題 2 問...

用迴圈鍊錶解決約瑟夫環問題

題目見 解法 includeusing namespace std templatestruct node class nodelist void insert node newnode else node josephusremove int interval if head p head p n...