約瑟夫環的三種解法

2021-09-24 05:53:44 字數 1079 閱讀 7370

有n個程式猿(編號1~n)圍成一圈順序迴圈報數,

從第乙個猿開始報數(從1到4報數,猿都是順序排列成一圈的),凡報到4的猿退出圈子,以下乙個為1繼續報數,問最後留下的是原來第幾號的那位。

題目的意思大致是這樣,比如最開始有五個人編號為1 2 3 4 5

第二輪起點是5,去掉3

第三輪起點是5,去掉5

第四輪起點是1,去掉2

最開始想到用陣列來做,思路稍微有點複雜,後來想到這種題最適合用鍊錶來做

這裡一共寫了鍊錶的遞迴與非遞迴演算法和陣列的非遞迴演算法

1.使用linkedlist的非遞迴演算法

public

static

intysfh

(int num)

return list.

peek()

;}

2.使用linedlist的遞迴演算法
public

static

inthelper

(int n)

public

static

intysfh

(int begin,linkedlist

list)

3.使用陣列的非遞迴演算法
public

static

intysfh1

(int n)

begin=end+1;

n--;}

for(

int i =

0; i < judge.length; i++)if

(!judge[i]

)return i+1;

return0;

}

4.測試
public

static

void

main

(string[

] args)

1.使用鍊錶的非遞迴演算法:

12.使用鍊錶的遞迴演算法:

13.使用陣列的非遞迴演算法:

1

總的來說,還是用鍊錶好做一些。

約瑟夫環的三種解法

約瑟夫問題是個有名的問題 n個人圍成一圈,從第乙個開始報數,第m個將被殺掉,最後剩下乙個,其餘人都將被殺掉。n個人從1開始編號,問最後活下來的人的編號是多少。include using namespace std intmain printf 遊戲結束,所有人死亡 n return0 主要是利用遞推...

經典演算法 約瑟夫環問題的三種解法

約瑟夫環問題,這是乙個很經典演算法,處理的關鍵是 偽鍊錶 問題描述 n個人圍成一圈,從第乙個人開始報數,報到m的人出圈,剩下的人繼續從1開始報數,報到m的人出圈 如此往復,直到所有人出圈。模擬此過程,輸出出圈的人的序號 在資料結構與演算法書上,這個是用鍊錶解決的。我感覺鍊錶使用起來很麻煩,並且這個用...

詳解基於C 實現約瑟夫環問題的三種解法

目錄 什麼是約瑟夫環問題?約瑟夫環問題在不同平台被 優化 描述的不一樣,例如在牛客劍指offer叫孩子們的遊戲,還有叫殺人遊戲,點名 最直接的感覺還是力扣上劍指offer62的描述 圓圈中最後剩下的數字。問題描述 0,1,n 1這n個數字排成乙個圓圈,從數字0開始,每次從這個圓圈裡刪除第m個數字 刪...