約瑟夫環的背景故事:java
著名猶太曆史學家 Josephus的故事:在羅馬人佔領喬塔帕特後,39個猶太人與Josephus及他的朋友躲在一個洞中,39個猶太人決定寧願死也不要被敵人抓到,因而決定了一個自殺方式,41我的排成一個圓圈,由第1我的開始報數,每報數到第3人該人就必須自殺,而後再由下一個從新報數,直到全部人都自殺身亡爲止。然而Josephus 和他的朋友並不想聽從。問題是,給定了總人數n和報數值m,一開始要站在什麼地方纔能避免被處決?Josephus要他的朋友先僞裝聽從,他將朋友與本身安排在第16個與第31個位置,因而逃過了這場死亡遊戲。遊戲
java代碼以下rem
/** * 約瑟夫環 * @param list 全部人,從1~41編號 * @param m 報數到m的人自殺 */ public static void yuesf(List list,int m){ int i = 0; while (list.size()>0){ i++; if(i%m!=0){ list.add(list.remove(0)); }else{ System.out.println("自殺的人是" + list.get(0)); list.remove(0); } } }
運行的結果是:get
自殺的人是3
自殺的人是6
自殺的人是9
自殺的人是12
自殺的人是15
自殺的人是18
自殺的人是21
自殺的人是24
自殺的人是27
自殺的人是30
自殺的人是33
自殺的人是36
自殺的人是39
自殺的人是1
自殺的人是5
自殺的人是10
自殺的人是14
自殺的人是19
自殺的人是23
自殺的人是28
自殺的人是32
自殺的人是37
自殺的人是41
自殺的人是7
自殺的人是13
自殺的人是20
自殺的人是26
自殺的人是34
自殺的人是40
自殺的人是8
自殺的人是17
自殺的人是29
自殺的人是38
自殺的人是11
自殺的人是25
自殺的人是2
自殺的人是22
自殺的人是4
自殺的人是35
自殺的人是16
自殺的人是31
List
很明顯,最後兩我的是16和31,說明程序是正確的程序