有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
解题思路: 一直遍历这个数组,每隔2个删除一个元素,直到只剩下一个元素 如果遇到了数组的结尾,那么就跳转到开头
public class 第三十七题凡数到3退出 {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
list.add(6);
list.add(7);
list.add(8);
list.add(9);
list.add(10);
list.add(11);
/*
* 第二种思路 一直遍历这个数组,每隔2个删除一个元素,直到只剩下一个元素 如果遇到了数组的结尾,那么就跳转到开头
*/
int i = 0;
while (list.size() != 1) {
// 如果到了末尾,则重新回到开头
if (i + 1 >= list.size()) {
i = -1;
} else if (i + 2 >= list.size()) {
i = -2;
}
// 删除元素
i = i + 2;
System.out.println("删除" + list.get(i) + "号");
list.remove(i);
}
System.out.println("最后剩下的人是" + list.get(0) + "号");
}
}