關于約瑟夫環的基本知識:
羅馬人攻占了喬塔帕特,41人藏在一個山洞中躲過了這場浩劫。這41個人中,包括歷史學家josephus和他的一個朋友。剩余的39個人為了表示不向羅馬人屈服,決定集體自殺。大家決定了一個自殺方案,所有這41人圍城一個圓圈,由第一個人開始順時針報數,沒報數為3的人就立刻自殺,然后由下一個人重新開始報數仍然是每報數為3的人就立刻自殺,......,知道所有人都自殺死亡為止.約瑟夫和他的朋友并不想自殺,于是約瑟夫想到了一個計策,他們兩個同樣參數到自殺方案中,但是最后卻躲過了自殺。請問是怎么做到的
代碼分享:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
import java.util.HashMap; import java.util.Map; public class MonkeyKing { public static void main(String args[]) { int n = 100 ; // 猴子總數 int m = 3 ; // 報數出局數 @SuppressWarnings ( "rawtypes" ) Map map = new HashMap(); int nn = 1 ; // 報數序號 int mm = 1 ; // 報數號 System.out.println( "-----------------------" + n + "只猴子選大王開始-----------------------" ); for ( int i = 1 ; i < n + 1 ; i++) { map.put(i, i); } while (map.size() > 1 ) { if (mm == 3 ) { map.remove(nn); } nn++; if (nn == n + 1 ) { nn = 1 ; } if (map.get(nn) != null ) { mm++; } if (mm == m + 1 ) { mm = 1 ; } } String result = map.values().toString(); System.out.println( "第" + result.substring( 1 , result.length() - 1 ) + "只猴子當選猴王" ); } } |
原文鏈接:https://www.idaobin.com/archives/364.html