C 資料結構與演算法 解決約瑟夫環問題

2022-10-10 22:24:24 字數 688 閱讀 9191

問題描述:編號為 1-n 的 n 個士兵圍坐在一起形成乙個圓圈,從編號為 1 的士兵開始依次報數(1,2,3…這樣依次報),數到 m 的 士兵會被殺死出列,之後的士兵再從 1 開始報數。直到最後剩下一士兵,求這個士兵的編號。

方法 :遞迴

優點:**少

缺點:效率低,堆疊會溢位

其實這道題還可以用遞迴來解決,遞迴是思路是 每次我們刪除了某乙個士兵之後,我們就對這些士兵重新編號,然後我們的難點就是找出刪除前和刪除後士兵編號的對映關係 。

我們定義遞迴函式 f(n,m) 的返回結果是存活士兵的編號,顯然當 n = 1 時,f(n, m) = 1。假如我們能夠找出 f(n,m) 和 f(n-1,m) 之間的關係的話,我們就可以用遞迴的方式來解決了。我們假設人員數為 n, 報數到 m 的人就自殺。則剛開始的編號為

public

class

sample

public

static

int josephring(int num, int start,int

step)

}

其他解題思路

頭疼的演算法與資料結構 約瑟夫環

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

資料結構 約瑟夫環

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

資料結構 約瑟夫環問題

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