杀和尚问题!国王要杀100个和尚。把这100个和尚编为1~100号(java笔试)
Java里的一个笔试题,是这样的:
国王要杀100个和尚。把这100个和尚编为1~100号。国王有一个规则,让这100个人围成一个大的圆圈。从1号和尚开始,数到5就杀掉,从被杀的和尚的下一个又开始数1,数到5就杀,就这样一直杀下去,问编号是多少的那个和尚活着?也就是只有一个活着,它是多少号?
public static void main(String[] args) {
List list = new ArrayList();
for (int i = 1; i <= 10; i++)
list.add(i);
//模拟计数 1-5
int i = 1;
//算法终止条件,只剩一人
while (list.size() > 1) {
//循环遍历list
for (int j = 0; j < list.size(); j++) {
if (i == 5) {
//移際的元素
System.out.println(list.get(j));
list.remove(j);
//移除无素后,队列长度变短,索引-1
j--;
//如果队列到头后,跨出 后 重头遍历,相当于假想的环
if (i > list.size()) {
i = 1;
break;
}
//因为是从1开始,下一次计数是从1开始的,下面++,所以先 i=0,下次计数的值为1
i = 0;
}
i++;
}
}
System.out.println("result:" + list.get(0));
}