12345678910111213141516171819202122232425262728293031323334353637383940414243 |
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); } }} |
时间: 2024-10-31 11:41:23