Come from:
https://blog.csdn.net/liujian20150808/article/details/50926614
Analysis:
- 編號0~n-1,報數從0開始
- 因爲是循環序列,k+n-1 可能大於當前總人數
- 當在解決n階約瑟夫環問題時,序號爲k的人出列後,剩下的n-1人又重新組成n-1階約瑟夫環問題
- k2 = m % n2,此處的k2 正好是要出列的後一個人
- 網友評論: 樓主確認i不是等於2開始賦值的? old=(new+p)%n(old),如果按照公式的話,你的第一輪的i應該是第二輪的總人數,也就是2,不該是一吧?
Test:
12%4%4=0
FAQ:
-
當數到m-1的那個人出列,它的下個人從0開始報數
當m<n時, 因爲編號從0開始,so 當某個人數到m時,它對應的序號爲()m-1)%n(這個觀點和作者不同)
-
引入中間變量k
爲了進行一般化表示整個序列 -
n-2 --> (k1+n-2)%n(n爲當前序列的總人數)
-
m的範圍到底是啥
-
最後一個出列的人編號爲ans,k=m%n —>出列人的編號
-
時間複雜度 O(n^m): n的m次方
-
最後在測試相應的代碼時,覺得是錯誤的
-
- 當我們得到一個人的時候(即一階約瑟夫環問題)的結果,那麼我們是否能通過一階約瑟夫環問題的結果,推導出二階約瑟夫環的結果呢?
這正好就是遞歸進層和遞歸退層
- 當我們得到一個人的時候(即一階約瑟夫環問題)的結果,那麼我們是否能通過一階約瑟夫環問題的結果,推導出二階約瑟夫環的結果呢?