問題描述:假設有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...