有n個人,編號從0到n-1,圍成圈,從0開始報數,第m個人出列,然後繼續從第m+1個人不斷報數、出列,求最後剩下的人是哪個。
鍊錶模擬,時間複雜度為o(nm),比較簡單,就不贅述了。
考慮n個人0, 1, 2, 3, ..., n-1,從0開始報數到m,所以編號為m-1的人出列。
剩下m, m+1, m+2, ..., n-2, n-1, 0, 1, 2, ..., m-2,
然後對其重新從0開始編號,0, 1, 2, ..., n-1
可以發現新的編號和老的編號的關係為(new+m)%n = old。
舉個例子:n=9 m=4
0 1 2 3 4 5 6 7 8 編號為3的出列,
變成 4 5 6 7 8 0 1 2
對應 0 1 2 3 4 5 6 7
例子出自tingyun_say
所以遞推公式就出來了:
f(n, m) = ( f(n-1, m) + m ) % n;
o(n)複雜度的方案就醬。
貼上**:
約瑟夫環問題求解
約瑟夫問題如下 n個人圍成圈,依次編號為1,2,n,現在從1號開始依次報數,當報到m時,報m的人退出,下乙個人重新從1報起,迴圈下去,問最後剩下那個人的編號是多少?input amount 佇列人數 m 數到m時退出乙個人 output 最後乙個退出的人的下標 思路 用布林陣列做 我們可以把這amo...
約瑟夫環遞迴求解
約瑟夫環是乙個數學的應用問題 已知m個人 以編號1,2,3.m分別表示 圍坐在一張圓桌周圍。從編號1開始報數,每次報到k的那個人出列,然後下乙個人再從1開始報數。求解 最後乙個出列的人的編號。使用遞迴 假設有10個人,編號為1 2 3 4 5 6 7 8 9 10,k 3。從1開始報數,則第一次出列...
約瑟夫環問題求解
josephu 問題為 設編號為 1,2,n 的 n 個人圍坐一圈,約定編號為 k 1 k n 的人從 1 開始報數,數到 m 的那個人出列,它的下一位又從 1 開始報數,數到 m 的那個人又出列,依次類推,直到所有人出列為止,由此 產生乙個出隊編號的序列。提示 用乙個不帶頭結點的迴圈鍊錶來處理 j...