約瑟夫環的實現

2021-08-08 22:56:25 字數 792 閱讀 3508

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

如圖:我們有由十個節點組成的環形鍊錶,其中資料域的值為編號,假設從1號開始報數,每次第三個人出隊,求出隊順序?

1.節點:

typedef

struct nodeelemsn;

2.構建乙個環形鍊錶:

elemsn* createring(int n)

}t->next=h;

return h;

}

3。當我們構建好這個環形鍊錶後,我們需要從頭開始報數,每次數到三,出隊乙個節點,然後從頭開始,知道這個鍊錶只剩下乙個節點為止,然後輸出這個節點;

void josephring(elemsn* head,int m)

else

}cout<

data;//輸出剩下的乙個編號;

}

4。主函式

int main(void)
最後結果:

約瑟夫環實現

約瑟夫環問題,這是乙個很經典演算法,處理的關鍵是 偽鍊錶 問題描述 n個人圍成一圈,從第乙個人開始報數,報到m的人出圈,剩下的人繼續從1開始報數,報到m的人出圈 如此往復,直到所有人出圈。模擬此過程,輸出出圈的人的序號 1 2 3 4 5 6 7 8 3,6 出圈 剩下7 8 1 2 4 5 7 8...

約瑟夫環的實現

用迴圈鍊錶實現的,思路很簡單,只是要注意指標的修改,程式設計基礎差的容易出錯。約瑟夫環 迴圈鍊錶實現 author milo.wang date 2012 9 15 include using namespace std typedef struct node node,nodeptr void j...

約瑟夫環的實現

首先介紹一下約瑟夫環 約瑟夫環 約瑟夫問題 是乙個數學的應用問題 已知n個人 以編號1,2,3 n分別表示 圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列 他的下乙個人又從1開始報數,數到m的那個人又出列 依此規律重複下去,直到圓桌周圍的人全部出列。通常解決這類問題時我們把編號從0 ...