設有n個人圍坐在圓桌周圍,現從第s個人開始報數,數到第m的人出列,然後從出列的下乙個人重新開始報數,數到第m的人又出列,如此反覆直到所有的人全部出列為止。
n個人坐滿一張圓桌,為迴圈表。
現在從第s個人開始,數到第m個人出列,然後下乙個人從新報數,數到m個人出列,直到重複到所有人為止。為從s開始後迴圈m-1次,得到結果輸出然後刪除,直到表為空。
//鍊錶結點類
class
link
};
//單迴圈鍊錶
class
lnklist
//建立單迴圈鍊錶
void
josephus
(int n, int s, int m)
while
(search-
>data != s)
//mark標誌為search前的結點,search為找到的結點
while
(pre-
>next != pre)
cout << search-
>data <<
"\n"
; del = search;
pre-
>next = search-
>next;
search = search-
>next;
delete del;
} cout << pre-
>data;
delete pre;}}
;int main()
lnklist arl
(n);
arl.
josephus
(n, s, m)
;return0;
}
//陣列實現
class
arrlist
position =0;
curlen = maxsize;}~
arrlist()
void
deletel
(int p)
}void
question
(int s, int m)}}
;int main()
出佇列乙個,就刪除乙個。直到為空。 鍊錶應用 Josephus問題
據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死也不要被人抓到,於是決定了乙個自殺方式 41個人排成乙個圓圈,由第1個人開始報數,每報數到第3人該人就必須自殺,然後再由下乙個重新報數,直到所有人...
Josephus問題的鍊錶實現
據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死也不要被敵人抓到,於是決定了乙個自殺方式,41個人排成乙個圓圈,由第1個人開始報數,每報數到第3人該人就必須自殺,然後再由下乙個重新報數,直到所...
迴圈鍊錶Josephus問題(c,cpp
問題描述 設有n個人圍坐在乙個圓桌周圍,現從第s個人開始報數,數到第m個的人出列,然後從出列的下乙個人重新開始報數,數到第m個的人又出列,如此反覆直到所有的人出列為止。josephus.c 1 include 2 include 3 typedef struct lnode 4lnode,linkl...