鍊錶實現約瑟夫環問題

2021-10-04 01:27:38 字數 701 閱讀 1711

約瑟夫環(約瑟夫問題)是乙個數學的應用問題:

已知n個人(以編號1,2,3...n分別表示)圍坐在一張圓桌周圍。

從1開始報數,數到m的那個人出列;

他的下乙個人又從1開始報數,數到m的那個人又出列;

依此規律重複下去,直到圓桌剩下最後乙個人,求那個人的位置。

總體思路:

1:建立鍊錶(用尾插法建立)

2:當人數大於1的時候,迴圈刪除m

4:輸出陣列的值並且釋放指標。

#include

#include

//迴圈鍊錶的方式

struct node

;int main()

else//m n不等於0的時候

p=head->next;//初始化,p是頭指標的下乙個

q=tail;//q是尾指標

i=1;

while(p!=q)//當pq不相等的時候,也就是剩下的人數大於1時

else

}head->next=q;//維持鍊錶完整性若沒有要求可以省略

answer[count]=p->data;//將找到的值賦給answer[0]。

count++;

free§;

head->next=null;}}

for(i=0;ifree(head);

return 0;

}

約瑟夫環問題的鍊錶實現

據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死也不要被敵人抓到,於是決定了乙個自殺方式,41個人排成乙個圓圈,由第1個人開始報數,每報數到第3人該人就必須自殺,然後再由下乙個重新報數,直到所...

鍊錶實現約瑟夫環

約瑟夫環 約瑟夫問題 是乙個數學的應用問題 已知n個人 以編號1,2,3.n分別表示 圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列 他的下乙個人又從1開始報數,數到m的那個人又出列 依 此規律重複下去,直到圓桌周圍的人全部出列。實現 include using namespace ...

用C鍊錶實現約瑟夫環問題

問題 設有n個人圍成乙個圓圈,現從第s個人開始報數,數到第m的人出列,然後從出列的下乙個人重新開始報數,數到第m的人再次出列,如此反覆,直到所有的人全部出列為止。對於任意給定的n s m,求按出列次序得到的n個人員的序列。例 就是問題簡單示例,裡面是每次要迴圈的資料,後面的s是出列的人 思路 先建立...