josephu(約瑟夫、約瑟夫環) 問題 josephu 問題為:設編號為1,2,… n的n個人圍坐一圈,約定編號為k(1<=k<=n)的人從1開始報數,數到m 的那個人出列,它的下一位又從1開始報數,數到m的那個人又出列,依次類
推,直到所有人出列為止,由此產生乙個出隊編號的序列。
舉個例子
n = 5 , 即有5個人
k = 1, 從第乙個人開始報數
m = 2, 數2下
經過一次出圈後
第二次出圈
第三次出圈
第四次出圈
所以最終的出圈順序 2->4->1->5->3
以上方法是使用單向迴圈鍊錶來完成的,下面看**展示
建立乙個孩子類,每個孩子物件表示乙個節點
class boy
public int getno()
public boy getnext()
public void setno(int no)
public void setnext(boy next)
}
建立單向迴圈鍊錶
並且建立新增孩子和顯示的方法
class circlesinglelinkedlist
/*** 新增指定的節點
* @param nums
*/public void add(int nums)
boy curboy = null;
for (int i = 1; i < nums + 1; i++) else}}
public void showboy()
//因為first不能動,所以建立乙個輔助指標
boy curboy = first;
while(true)}}
重點:出圈
/**
* 根據使用者輸入,計算小孩出圈的順序
* @param startno 開始小孩的編號
* @param countnum 一次數幾下
* @param nums 總共小孩數
*/public void countboy(int startno,int countnum,int nums)
//建立輔助指標,指向first指標的前一位
boy helper = first;
while(helper.getnext() != first )
//根據開始小孩的編號,是first指標指向開始小孩
for (int i = 0; i < startno - 1; i++)
//開始報數出隊
while(first.getnext() != first)
//出隊
system.out.println("小孩" + first.getno() + "出圈~~");
helper.setnext(first.getnext());
first = first.getnext();
}system.out.println("最後出圈的小孩編號" + first.getno());
}
所有**
public class josephu
}//單向迴圈鍊錶
class circlesinglelinkedlist
/*** 新增指定的節點
* @param nums
*/public void add(int nums)
boy curboy = null;
for (int i = 1; i < nums + 1; i++) else}}
public void showboy()
//因為first不能動,所以建立乙個輔助指標
boy curboy = first;
while(true)
}/**
* 根據使用者輸入,計算小孩出圈的順序
* @param startno 開始小孩的編號
* @param countnum 一次數幾下
* @param nums 總共小孩數
*/public void countboy(int startno,int countnum,int nums)
//建立輔助指標,指向first指標的前一位
boy helper = first;
while(helper.getnext() != first )
//根據開始小孩的編號,是first指標指向開始小孩
for (int i = 0; i < startno - 1; i++)
//開始報數出隊
while(first.getnext() != first)
//出隊
system.out.println("小孩" + first.getno() + "出圈~~");
helper.setnext(first.getnext());
first = first.getnext();
}system.out.println("最後出圈的小孩編號" + first.getno());
}}//建立乙個boy節點,沒乙個物件表示乙個孩子
class boy
public int getno()
public boy getnext()
public void setno(int no)
public void setnext(boy next)
}
約瑟夫問題 約瑟夫環
約瑟夫 問題 有時也稱為約瑟夫斯置換,是乙個出現在電腦科學和數學中的問題。在計算機程式設計的演算法中,類似問題又稱為約瑟夫環。又稱 丟手絹問題 據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死...
約瑟夫問題 約瑟夫環
約瑟夫問題 有時也稱為約瑟夫斯置換,是乙個出現在電腦科學和數學中的問題。在計算機程式設計的演算法中,類似問題又稱為約瑟夫環。又稱 丟手絹問題 據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死也...
約瑟夫問題
這是17世紀的法國數學家加斯帕在 數目的遊戲問題 中講的乙個故事 15個教徒和15 個非教徒在深海上遇險,必須將一半的人投入海中,其餘的人才能倖免於難,於是想了乙個辦法 30個人圍成一圓圈,從第乙個人開始依次報數,每數到第九個人就將他扔入大海,如此迴圈進行直到僅餘15個人為止。問怎樣排法,才能使每次...