問題描述:編號為1、2、… n 的小朋友圍成一圈,從編號為k( 1< k < n) 的小朋友開始報數,報到m的小朋友出列,該小朋友的下一位重新開始從0開始報數,數到m的小朋友再次出列,依次類推,直到所有小朋友出列。由此產生乙個出列編號的佇列。
package 鍊錶;
/** * @author lyq on 2019-12-23 10:42 下午
* @desc 利用單向環形列表解決約瑟夫問題
*/public
class
josephproblem
public
intgetno()
public
void
setno
(int no)
public node getnext()
public
void
setnext
(node next)
@override
public string tostring()
';}}
/** * 單向環形列表:first指向第乙個元素不變;輔助指標cur指向當前節點;最後乙個節點的next指向first
*/private
static
class
roundlinkedlist
for(
int i =
1;i <= n;i++
)else
if(i == n)}}
/** * 列印出圈小孩順序
* @param startno 第一次報1的小孩位置
* @param step 出圈小孩報的數
* @param nums 初始小孩個數
*/public
void
outlist
(int startno,
int step,
int nums)
// 建立輔助指標,始終指向first指標的前乙個位置
node temp = first;
node helper = null;
while
(true
)else
}// 初始時將helper和first移動step-1位
for(
int i =
0;i < startno-
1;i++
)// 開始報數,每移動 step-1 位,移出first所在節點,first指標前移一位;直到圈中只有乙個節點
while
(true
)else
system.out.
printf
("移出節點:[%s] \n"
, first)
; first = first.next;
helper.next = first;}}
}}public
static
void
main
(string[
] args)
}
資料結構與演算法 約瑟夫問題
已知n個人 以編號1,2,3,n分別表示 圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列 他的下乙個人又從k開始報數,數到m的那個人又出列 一詞重複下去。直到圓桌的人全部出列。試用c 程式設計實現 include include include define error 0 type...
資料結構與演算法03 約瑟夫問題
約瑟夫問題 39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死也不要被敵人抓。於是決定了自殺方式,41個人排成乙個圓圈,由第1個人開始報數,每報數到第3人該人就必須自殺。然後下乙個重新報數,直到所有人都自殺身亡為止。然而josephus 和他的朋友並不想遵從,joseph...
演算法和資料結構 約瑟夫問題
package com.structure.demo import android.os.bundle import android.util.log public class josephactivity extends activity class circlesinglelinkedlist ...