本文共 1247 字,大约阅读时间需要 4 分钟。
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 34 35 36 37 38 39 40 41 42 43 | package josephus; import java.io.IOException; import java.util.ArrayList; /** * Created by piqiu on 1/19/16. * Flavius Josephus是公元一世纪的一个犹太历史学家.传说他是罗马人俘获的41个犹太反叛者之一, * 罗马人决定杀害他们,而不是劝其投降.他们决定让这些犹太人站成一个圆圈,并且每隔3个人就杀害1人, * 直到杀光所有的人.Josephus并不相死,于是他计算了一下自己需要站的位置,以使他成为最后一个活下来 * 的人,从而免于一死.这样就产生了一类称作Josephus的问题.这些问题表述为:在链表中的事件不是依次 * 取走,而是每次循环地取走第i个元素,直至取走所有事件的情况下,找出事件的顺序. */ public class Josephus { public static void main(String[] args) throws IOException { // 总人数 int num = 10; // 每次删后面的第几个 int step = 3; // 删除的下标索引 int index = step - 1; // 被删除的数据 Object removeData; // 填充数据到ArrayList ArrayList list = new ArrayList(); for (int i = 1; i <= 10; i++) { list.add(new Integer(i)); } System.out.println("The order is: "); // 循环删除 while (!(list.isEmpty())) { removeData = list.remove(index); num = num - 1; if (num > 0) index = (index + step -1) % num; System.out.println(removeData); } } } |
转载地址:http://jfnil.baihongyu.com/