約瑟夫問題

2021-10-07 15:52:35 字數 2298 閱讀 9958

建立環形鍊錶的思路:

1 構建乙個單向的環形鍊錶思路:

1)先建立第乙個節點,讓first指向該節點,並形成環形

2)後面當我們每建立乙個新的節點,就把該節點加入到已有的環形鍊錶中即可。

2 遍歷環形鍊錶

1)先讓乙個輔助指標(變數),指向first節點

2)然後通過乙個while迴圈遍歷該環形鍊錶即可 curboy.next = first 結束

public

class

circlesinglelinklistdemo_1

}class

circlesinglelinklist

boy curboy = null;

//輔助指標,幫助構建環形鍊錶

//使用for迴圈來建立我們的環形鍊錶

for(

int i =

1; i <= nums; i++

)else}}

//遍歷當前環形鍊錶

public

void

showboy()

//因為first不能動,因此我們仍然使用乙個輔助指標完成遍歷

boy curboy = first;

while

(true

) curboy = curboy.

getnext()

;}}/**

* 根據使用者的輸入,計算小孩出圈的順序

* @param startno // 表示從第幾個小孩開始數數

* @param countnum 表示數幾下

* @param nums 表示最初有幾個小孩在圈中

*/public

void

countyboy

(int startno,

int countnum,

int nums)

//建立乙個輔助指標,幫助小孩完成出圈

boy helper = first;

//需要建立乙個輔助指標(變數) helper ,事先應該指向環形鍊錶的最後這個節點

while

(true

) helper = helper.

getnext()

;}//小孩報數前,先讓first和helper移動 k - 1次數

for(

int i =

0; i < startno -

1; i++

)//.當小孩報數時,讓first和helper指標同時的移動m - 1次數,然後出圈

//這裡是迴圈操作,知道圈中只有乙個節點

while

(true

)//讓first 和helper指標同時移動 countnum -1

for(

int j =

0;j < countnum -

1; j++

)//這時first指向的節點,就是要出圈的小孩節點

system.out.

printf

("小孩%d出圈 \n"

,first.

getno()

);//這時將first指向的小孩節點出圈

first = first.

getnext()

; helper.

setnext

(first);//

} system.out.

printf

("最後留在圈中的小孩編號%d \n"

,helper.

getno()

);}}

//建立乙個boy類,表示乙個節點

class

boypublic

intgetno()

public boy getnext()

public

void

setno

(int no)

public

void

setnext

(boy next)

@override

public string tostring()

';}}

約瑟夫問題 約瑟夫環

約瑟夫 問題 有時也稱為約瑟夫斯置換,是乙個出現在電腦科學和數學中的問題。在計算機程式設計的演算法中,類似問題又稱為約瑟夫環。又稱 丟手絹問題 據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死...

約瑟夫問題 約瑟夫環

約瑟夫問題 有時也稱為約瑟夫斯置換,是乙個出現在電腦科學和數學中的問題。在計算機程式設計的演算法中,類似問題又稱為約瑟夫環。又稱 丟手絹問題 據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死也...

約瑟夫問題

這是17世紀的法國數學家加斯帕在 數目的遊戲問題 中講的乙個故事 15個教徒和15 個非教徒在深海上遇險,必須將一半的人投入海中,其餘的人才能倖免於難,於是想了乙個辦法 30個人圍成一圓圈,從第乙個人開始依次報數,每數到第九個人就將他扔入大海,如此迴圈進行直到僅餘15個人為止。問怎樣排法,才能使每次...