Josephus環問題求解(Java實現)
阿新 • • 發佈:2019-01-05
Josephus環問題:
古代某法官要判決number個犯人的死刑,他有一條荒唐的法律,將犯人站成一個圓圈,從第start個人開始數起,每數到第distance個犯人,就拉出來處決,然後再從下一個開始數distance個,數到的人再處決,......,直到剩下最後一個犯人予以赦免。
舉例:當number=5,start=0,distance=2時,Josephus環問題解決的Java程式碼如下(SeqList類見Java實現順序表及常見操作):
public class JosephusProblem { public JosephusProblem(int number,int start,int distance){ //建立Josephus環並求解,引數制定環的長度,起始位置,計數 System.out.println("Josephus:number="+number+" start="+start+" distance="+distance); //建立順序表例項,元素型別為String型別,構造方法引數指定順序表容量 SeqList<String> list = new SeqList<String>(number); for(int i=0;i<number;i++){ //插入ABCDE list.insert((char)('A'+i)+""); } //打印表的內容 System.out.println(list.toString()); int i = start; while(list.size()>1){ //按照迴圈方式對錶進行遍歷 //由於是環,所以對i值做如下處理 i = (i+distance-1)%list.size(); //處決 System.out.println("刪除"+list.remove(i).toString()+","); System.out.println(list.toString()); } System.out.println("被赦免者是:"+list.get(0).toString()); } public static void main(String args[]){ new JosephusProblem(5, 0, 2); } }