引用
据说著名犹太历史学家 约瑟夫有过以下的故事:
在罗马人占领乔塔帕特后,39 个犹太人与约瑟夫及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而约瑟夫 和他的朋友并不想遵从,约瑟夫要他的朋友先假装遵从,他将朋友与自己安排在第16个与第31个位置,于是逃过了这场死亡游戏。
我的答案:
package test;
import java.util.ArrayList;;
public class CircleTest {
int m; //总人数
int n; //第几个出局
ArrayList circle = new ArrayList ();
public CircleTest(int m, int n) {
this.m = m;
this.n =n;
//初始化环
for (int i = 1; i <= m; i++) {
circle.add(String.valueOf(i));
}
print(circle);
}
public void doAction() {
ArrayList temp = null;
int k = n;//计数
while (true) {
temp = (ArrayList)circle.clone();
if (temp.size() == 1) {
System.out.println(temp.get(0)+"\n");//最后一个出局的人
break;
}
for (int i =0; i < temp.size(); i++) { //循环
k--;
if (k == 0) {
System.out.print(temp.get(i)+" ");//打印出局的人
circle.remove(temp.get(i)); //出局
k = n; //重新开始计数
}
}
}
}
//打印
public void print(ArrayList list){
for(int i=0;i
System.out.print(list.get(i)+" ");
}
System.out.print("\n\n");
}
public static void main(String args[]) {
CircleTest test = new CircleTest(41,3);
test.doAction();
}
}
分享到:
2013-05-17 10:40
浏览 3221
评论