有100个人围成一个圈,从1开始报数,报到14的这个人就要退出然后其他人重新开始,从1报数,到14退出问:最后剩下的是100人中的第几个人?
import java.util.*;
class CountTest {
public static void main(String[] args) {
int index = count(100, 14);
System.out.println("最后剩下的人编号是:" + index);
}
//定义一个函数,传入围成圈的人数,以及每报到多少的人就要退出,返回最后剩下的人的编号
public static int count(int sum, int check) {
//使用ArrayList存入数字1到100来代表每个人的编号
List<Integer> l = new ArrayList<Integer>();
for (int i = 1; i <= sum; i++) {
l.add(i);
}
//获取ArrayList的迭代器
ListIterator<Integer> li = l.listIterator();
int count = 0; //定义计数器
//循环条件:圈中的人数大于1
//每循环一次,计数器加一,使用next()方法使指针指向下一个数
//当指针指向的是列表的最后一个元素时,重新获取迭代器,使指针回到列表开头
//如果计数器到达14就把迭代器指向的元素删除
while (l.size() > 1) {
count++;
if(li.hasNext()) {
li.next();
} else {
li = l.listIterator();
li.next();
}
if (count == check) {
li.remove();
count = 0;
}
}
//最后返回列表中剩下的最后一个元素
return l.get(0);
}
}
|