約瑟夫問題:設編號為1,2,… n的n個人圍坐一圈,約定編號為k(1<=k<=n)的人從1開始報數,數到m 的那個人出列,它的下一位又從1開始報數,數到m的那個人又出列,依次類推,直到所有人出列為止,由此產生乙個出隊編號的序列。
例如編號為12345的環形鍊錶,從1開始,則出隊編號為:2—>4—>1—>5—>3.
package jusepfu;
public
class
josepfu
}class
circlesinglelinkedlist
boy curboy = null;
for(
int i =
1;i <= nums ; i++
)else}}
public
void
showboy()
boy curboy = first;
while
(true
) curboy = curboy.
getnext()
;}}public
void
countboy
(int startno,
int countnum,
int nums)
//將helper指向環形鍊錶的最後乙個節點
boy helper = first;
while
(true
) helper = helper.
getnext()
;}//將helper和startno向後移到startno處
for(
int j =
0; j< startno -
1;j++
)//開始出圈
while
(true
)for
(int i =
0; i < countnum-
1; i++
) system.out.
printf
("小孩%d出圈\n"
,first.
getno()
);first = first.
getnext()
; helper.
setnext
(first);}
system.out.
printf
("最後留在圈中的小孩編號為%d\n"
,first.
getno()
);}}
class
boypublic
intgetno()
public
void
setno
(int no)
public boy getnext()
public
void
setnext
(boy next)
}
小孩2出圈
小孩4出圈
小孩1出圈
小孩5出圈
最後留在圈中的小孩編號為3
單向環形鍊錶和約瑟夫問題
當n 5 m 2,k 1時出佇列的順序 2 4 1 5 3 乙個節點也能形成環鏈 構建乙個單向的環形鍊錶思路 1.先建立第乙個節點,讓first指向該節點,並形成環形.2.後面當我們每建立乙個新的節點,就把該節點,加入到已有的環形鍊錶中即可.public void addnode int nums ...
單項環形鍊錶介紹和約瑟夫問題
josephu 問題為 設編號為1,2,n的n個人圍坐一圈,約定編號為k 1 k n 的人從1開始報數,數到m 的那個人出列,它的下一位又從1開始報數,數到m的那個人又出列,依次類推,直到所有人出列為止,由此產生乙個出隊編號的序列。先建立第乙個節點,讓 first 指向該節點,並形成環形 後面當我們...
1 6 單向環形鍊錶和約瑟夫問題
約瑟夫問題 實現思路 實現 public class circlesinglelinkedlistdemo 單向環形鍊錶類 class circlesinglelinkedlis children current null 尾指標 指向下乙個節點為頭節點的節點 方便插入,不需要每次都遍歷 for i...