首先介紹一下約瑟夫環:
約瑟夫環(約瑟夫問題)是乙個數學的應用問題:已知n個人(以編號1,2,3…n分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列;他的下乙個人又從1開始報數,數到m的那個人又出列;依此規律重複下去,直到圓桌周圍的人全部出列。通常解決這類問題時我們把編號從0~n-1,最後[1] 結果+1即為原問題的解。
在這裡用陣列實現以下約瑟夫環,請看題:
有n只猴子,按順時針方向圍成一圈選大王(編號從1到n),從第1號開始報數,一直數到m,數到m的猴子退出圈外,剩下的猴子再接著從 1 開始報數。就這樣,直到圈內只剩下乙隻猴子時,這個猴子就是猴王。現在告訴你 n 和 m,請幫忙求出哪乙隻猴子能當大王。
在這裡我們實現的方法是把所有猴子的編號存到陣列裡面去,然後選到哪只猴子,就把該位置的資料刪除掉(通過後面的資料向前移動乙個位置),最後剩下的就是猴王了。
int fun(int
m, int n)
; for (int i = 0; i < m; i++)
arr[i] = i+1;
intpos = 1;//當前位置
int posend = m;//最後的猴子所在的位置
while (posend!=1)
return arr[0];
}int main()
return
0;}
約瑟夫環實現
約瑟夫環問題,這是乙個很經典演算法,處理的關鍵是 偽鍊錶 問題描述 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的那個人又出列 依此規律重複下去,直到圓桌周圍的人全部出列。如圖 我們有由十個節點組成的環形鍊錶,其中資料域的值為編...