約瑟夫環(資料結構小實驗二)

2021-09-27 08:30:49 字數 906 閱讀 5961

[問題描述]

約瑟夫(joseph)問題的一種描述是:編號為1,2,…,n的n個人按順時針方向圍坐一圈,每人持有乙個密碼(正整數)。一開始任選乙個正整數作為報數上限值m,從第乙個人開始按順時針方向自1開始順序報數,報到m時停止報數。報m的人出列,將他的密碼作為新的m值,從他在順時針方向上的下乙個人開始重新從1報數,如此下去,直至所有人全部出列為止。試設計乙個程式求出出列順序。

[基本要求]

利用單向迴圈鍊錶儲存結構模擬此過程,按照出列的順序印出各人的編號。

[測試資料]

由學生任意指定。

如:m的初值為20;n的值為7;密碼:3,1,7,2,4,8,4;

(正確的輸出結果應為6,1,4,7,2,3,5)。

(報告上要求寫出多批資料測試結果)

[實現提示]

程式執行後首先要求使用者輸入初始報數上限值m,人數n,(設n≤30)。然後輸入各人的密碼。

[選作內容]

向上述程式中新增在順序結構上實現的部分。

#include

#include

using namespace std;

struct node

;int

main()

rear->next=head;

node *p=rear;

while

(n--)}

return0;

}

實現也並不是特別的麻煩,但是頭結點我懶得簡化掉(之前一直想著連成環),後來一想,可以直接用頭結點存編號1就好了,有點麻煩的是第一次數數和其他時刻不一樣,所以必須要從rear開始查。其次考慮到演算法的效率,大於人數上限的直接公式求解,注意到m-1=(m+n-1)%n與n- -,所以以公式m=(m+n)%(n+1)簡化操作。考慮到的記憶體問題,特設定temp進行使用過的釋放。

資料結構 約瑟夫環

問題描述 約瑟夫環問題的一種描述是 編號為1,2,n的n個人按順時針的方向圍坐一圈,每個人持有乙個密碼 正整數 一開始任選乙個正整數作為報數的上限值m,從第乙個人開始按順時針方向自1開始順序報數,報到m時停止報數。報m的人出列,將他的密碼作為新的m值,從他的順時針方向上的下乙個人開始重新報數,如此下...

資料結構 約瑟夫環問題

實驗一線性表的應用 實驗目的和要求 通過實驗進一步理解線性表的邏輯結構和儲存結構,提高使用理論知識指導解決實際問題的能力,熟練掌握鍊錶的實際應用。主要內容 題目1 josephus環問題 問題描述 約瑟夫 joseph 問題的一種描述是 編號為1,2,n的n個人按順時針方向圍坐一圈,每人持有乙個密碼...

資料結構之約瑟夫環

資料結構之約瑟夫環 c語言實現 因為最近在學習資料結構和做相關的實驗,所以想把自己的所做的分享一下 設有編號為1,2,n的n n 0 個人圍成乙個圈,每個人持有乙個密碼m。從第乙個人開始報數,報到m時停止報數,報m的人出圈,再從他的下乙個人起重新報數,報到m時停止報數,報m的出圈,如此下去,直到所有...