C 約瑟夫環 解法思路

2021-09-09 08:26:34 字數 773 閱讀 9338

0.

約瑟夫環(約瑟夫問題)是乙個數學的應用問題:已知n個人(以編號1,2,3...n分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列;他的下乙個人又從1開始報數,數到m的那個人又出列;依此規律重複下去,直到圓桌周圍的人全部出列,約瑟夫環結束。

1.用佇列,可以很好的模擬這個思路。

class program 

console.writeline("約瑟夫環開始了");

int flag = 1;

while (pes.count >= 2)

else

}console.writeline("約瑟夫環結束,最後出隊的是:"+pes.dequeue());

console.readkey();

//另外一種思路

//給每個人的標誌設為0,一開始都是0.然後出隊時把標誌位設為1.

//當報數沒有出隊,則下個0(到尾部時,則從頭為0的開始),直到出隊時,把0設為1,遇到1則跳過。

//最終所有的0都會置1,都出隊了。//}

}

示例列印如下:

定義參與的人數:

10定義規定的數字:

5約瑟夫環開始了

出隊:5

出隊:10

出隊:6

出隊:2

出隊:9

出隊:8

出隊:1

出隊:4

出隊:7

約瑟夫環結束,最後出隊的是:3

約瑟夫環O N 解法

無論是用鍊錶實現還是用陣列實現都有乙個共同點 要模擬整個遊戲過程,不僅程式寫起來比較煩,而且時間複雜度高達o nm 當n,m非常大 例如上百萬,上千萬 的時候,幾乎是沒有辦法在短時間內出結果的。我們注意到原問題僅僅是要求出最後的勝利者的序號,而不是要讀者模擬整個過程。因此如果要追求效率,就要打破常規...

約瑟夫環問題C 遞迴解法

約瑟夫環 約瑟夫問題 是乙個數學的應用問題 已知n個人 以編號1,2,3.n分別表示 圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列 他的下乙個人又從1開始報數,數到m的那個人又出列 依此規律重複下去,直到圓桌周圍的人全部出列。通常解決這類問題時我們把編號從0 n 1,最後 1 結果...

約瑟夫環數學解法

無論是用鍊錶實現還是用陣列實現都有乙個共同點 要模擬整個遊戲過程,不僅程式寫起來比較煩,而且時間複雜度高達o nm 當n,m非常大 例如上百萬,上千萬 的時候,幾乎是沒有辦法在短時間內出結果的。我們注意到原問題僅僅是要求出最後的勝利者的序號,而不是要讀者模擬整個過程。因此如果要追求效率,就要打破常規...