import java.util.*; public class test1 { public static void main(String[] args) throws Throwable { List<Integer> list = new LinkedList<Integer>(); for (int i=1; i<=500; i++) { list.add(i);//500个小朋友放到链表里 } int index = 0, num = 0; while (list.size() > 1) { //如果人数大于1 num++; //数数 if (num%3 == 0) { //如果数到3 System.out.println(list.remove(index)); //从链表删除 num = 0; //重新数数 } else { //没数到3 index++; //位置前移 } if (index==list.size()) { //如果位置移到最后
public static void main(String[] args) {
boolean[] arr = new boolean[500]; //定义500个人
for(int i=0; i<arr.length; i++) {
arr[i] = true; //假设人还在为true,退出为false。
}
int leftCount = arr.length; //剩余人数
int countNum = 0; //数(1\2\3) int index = 0; //当前位置
while(leftCount > 1) {
//循环,知道只剩1个true为止
if(arr[index] == true) {
countNum ++;
if(countNum == 3) {
//数到3,改false
countNum = 0;
arr[index] = false;
leftCount --;
}
}
index ++;
if(index > arr.length-1) { //当过了最后1人时,从头开始数
index = 0;
}
}
for(int i=0; i<arr.length; i++) {
if(arr[i] == true) {
System.out.println(i);
}
}
}
}
import java.util.*;
public class test1 {
public static void main(String[] args) throws Throwable {
List<Integer> list = new LinkedList<Integer>();
for (int i=1; i<=500; i++) {
list.add(i);//500个小朋友放到链表里
}
int index = 0, num = 0;
while (list.size() > 1) { //如果人数大于1
num++; //数数
if (num%3 == 0) { //如果数到3
System.out.println(list.remove(index)); //从链表删除
num = 0; //重新数数
} else { //没数到3
index++; //位置前移
}
if (index==list.size()) { //如果位置移到最后
index = 0; //位置重新回到开头
}
} System.out.println(list.get(0)); //打印最后一个
}
}
是不是这样写?但我还是不明白,题目不是叫我找出最后一个退出的小朋友吗?我是这样理解题目的:从第一个小朋友开始,循环报数1,2,3报到3的就退出,那退出的小朋友的号码应该是3,6,9.....这样的顺寻依次下去,所以最后一个退出的小朋友应该是接近500的那个小朋友啊!是不是我理解题目错误了?