[Java] 纯文本查看 复制代码
package day07;
//有N(控制台输入)个人围成一个圈,从第一个人开始报数,报的数是3的倍数的人退出圆圈,问最后剩下的是第几个人
import java.util.ArrayList;
import java.util.Scanner;
public class Demo01 {
//定义一个存放人编号的集合,并输入一共有多少人
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入有多少个人");
int num = sc.nextInt();
ArrayList<Integer> list = new ArrayList<Integer>();
addList(list, num);
removeList(list);
}
//把人们的编号添加到集合中
public static void addList(ArrayList<Integer> list, int num) {
for (int i = 1; i <= num; i++) {
list.add(i);
}
}
//创建退出圈人的方法
public static void removeList(ArrayList<Integer> list) {
//定义为人说报的数字,num为人编号所对应的索引
for (int i = 1, num = 0;; i++, num++) {
if (num < list.size() && i % 3 == 0) {
list.remove(num);
num--;
} else if (list.size() == 1) {
break;
} else if (num > list.size() - 1) {
num = -1;
i--;
}
}
System.out.println(list.get(0));
}
}