約瑟夫問題又稱丟手絹問題,一群小孩圍成一圈,從第m個小孩開始數數,數到第n個小孩出列,剩下的小孩繼續數數,直到剩最後乙個小孩:考常知識《單向環形鍊錶》
public
class
josephu
}//建立環形單向鍊錶
class
circlesinglelinkedlist
boy curboy = null;
//輔助指標,幫助構建環形鍊錶
//使用for迴圈建立環形鍊錶
for(
int i=
1;i<=nums;i++
)else}}
//遍歷環形鍊錶
public
void
showboy()
//因為first不能動,因此我們需要乙個輔助指標
boy curboy = first;
while
(true
) curboy=curboy.
getnext()
;//curboy後移}}
//根據使用者輸入,計算出圈順序
/** *
* @param startno 表示從第幾個小孩開始數數
* @param countnum 表示數幾下
* @param nums 表示小孩總數
*/public
void
countboy
(int startno,
int countnum,
int nums)
//建立乙個輔助指標,幫助小孩出圈
boy helper = first;
while
(true
) helper = helper.
getnext()
;}//先讓first和helper移動到報數的那個小孩位置,移動k-1次
for(
int j=
0;j1;j++
)//當小孩報數,first和helper移動m-1次,然後出圈
while
(true
)for
(int j=
0;j1;j++
)//此時first指向的小孩出圈
system.out.
printf
("小孩%d出圈\n"
,first.
getno()
);//出圈
first = first.
getnext()
; helper.
setnext
(first);}
system.out.
printf
("最後留在圈的小孩%d \n"
,first.
getno()
);}}
//建立乙個boy類,表示乙個節點
class
boypublic
intgetno()
public
void
setno
(int no)
public boy getnext()
public
void
setnext
(boy next)
}
韓順平老師的學習方法
1.高效而愉快的學習 快速學習 2.先建立乙個整體的框架。然後細節 3.用什麼再學什麼 計算機知識是永遠學不完的,要在實戰中快速學習 4.先know how 再know how 並不是什麼都要知道原理,先做出來,再慢慢知道 5.軟體程式設計是一門 做中學 的學科,不是會了再做,而是做了才會 一定要動...
韓順平Linux教程學習筆記
vmtools linux世界裡,一切皆檔案。總結 linux的目錄中有且只有乙個根目錄。linux的各個目錄存放的內容是規劃好,不用亂放檔案。linux是以檔案的形式管理我們的裝置,因此linux系統,一切皆為檔案。linux的各個檔案目錄下存放什麼內容,必須有乙個認識。快捷鍵使用練習 使用者,組...
演算法學習之約瑟夫環問題
問題 假設下標從0開始,0,1,2 m 1共m個人,從1開始報數,報到k則此人從環出退出,問最後剩下的乙個人的編號是多少?我的理解 設f m,k,i 為m個人的環,報數為k,第i個人出環的編號,m個人的環第i個出來的人就相當於m 1個人的環第i 1個出來的人,不過這個序號是相當於原來m個人的序號。但...