有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個數字 刪...