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

2021-09-27 11:59:25 字數 606 閱讀 4839

【約瑟夫環問題】

已知 n 個人(n>=1)圍坐一圓桌周圍,從 1 開始順序編號,從序號為 1 的人開始報數,順時針數到 m 的那個人出列。下乙個人又從 1 開始報數,數到m 的那個人又出列。依此規則重複下去,直到所有人全部出列。請問最後乙個出列的人的初始編號。 

【輸入輸出】

輸入人數 n,所報數 m,輸出最後乙個人的初始編號。 

【解決思路】

首先因為是圓桌問題,使用鍊錶解決的話需要構建迴圈鍊錶。

接著是出列問題,這裡我的設計思路是將指向鍊錶的指標移動到需要出列的人的位置,然後根據正常的鍊錶刪除進行操作即可。

【程式**】

#include using namespace std;

struct node ;

int n,m;

node *head,*p,*r;

int main()

r->next=head;

r=head;

for (i=1; i<=n; i++)

}

in:

10 3

out:

3 6 9 2 7 1 8 5 10 4

【參考**】

用迴圈佇列求解約瑟夫環問題

用迴圈佇列求解約瑟夫環問題普通形式求解 對比分析 設有n個人站成一圈,其編號為1 n。從編號為1的人開始按順時針方向1 2 迴圈報數,數到m的人出列,然後從出列者的下乙個人重新開始報數,數到m的人又出列,如此重複進行,直到n個人都出列為止。要求輸出這n個人的出列順序。例子展示 當n 5,m 2時的約...

利用迴圈鍊錶求解約瑟夫問題

這題其實就是約瑟夫問題換了個 皮。用迴圈鍊錶解決的話思路最清晰,如下,注意看注釋的解釋。using system.collections.generic class circlenode 建立迴圈鍊錶節點 class solution temp.next head 迴圈結束,所有節點已經插入,則讓t...

資料結構 迴圈鍊錶求解約瑟夫環問題

開啟部落格,竟然有兩個多月沒更新部落格了。最近一直在忙著準備實習招聘,所以沒有學習什麼android的新的東西,而是在學習招聘中最被重視之一的資料結構與演算法,而自己又非科班出身,哎.也許沒那麼難,加油!另外,對於這個部落格,我是想專門寫一些安卓的知識方便自己回顧還有比我新手的來參考的,就像我收藏的...