一百个死囚站成一排从1开始报数,喊出奇数的人拉出来枪毙,剩下的重新报数,喊出奇数的人再枪毙,一次循环,请问在哪个位置的人能活下来
public class test {
public static void main(String[] args) {
long l = System.currentTimeMillis();
ArrayList list = new ArrayList(100);
for (int i = 1; i <= 100; i++) {
list.add(new Number(i, i));
}
while (true) {
Iterator iterator = list.iterator();
while (iterator.hasNext()) {
Number next = (Number) iterator.next();
if (next.getNum() % 2 != 0) {
iterator.remove();
}
}
if (list.size() == 1) {
Number number = (Number) list.get(0);
System.out.println(number.getId());
break;
} else
for (int i = 1; i <= list.size(); i++) {
Number number = (Number) list.get(i - 1);
number.setNum(i);
}
}
long l1 = System.currentTimeMillis();
System.out.println(l1-l);
}
}
class Number {
private int num;
private int id;
public void setNum(int num) {
this.num = num;
}
public void setId(int id) {
this.id = id;
}
public int getNum() {
return num;
}
public int getId() {
return id;
}
public Number(int num, int id) {
this.num = num;
this.id = id;
}
}
运行结果是:64
还有一种理解为:
1!嘭!还剩99位;
1!嘭!还剩98位…