约瑟夫环运作如下:
1、一群人围在一起坐成 [2] 环状(如:N)
2、从某个编号开始报数(如:K)
3、数到某个数(如:M)的时候,此人出列,下一个人重新报数
4、一直循环,直到所有人出列 ,约瑟夫环结束
数数,数是3的倍数,则移除该数:
public static int getNum(int num) {
// 创建集合,存储 1 到 num 的对象
ArrayList<Integer> list = new ArrayList<>();
for (int i = 1; i <= num; i ++) {
list.add(i);
}
// 用来数数,只要是3的倍数,就remove
int count = 1;
// 只要集合中元素数不等于1,就remove
for (int i = 0; list.size() != 1; i ++) {
// 如果i增长到集合 最大的索引 + 1 时,重新归零
if (i == list.size()) {
i = 0;
}
// 条件
// 如果是3的倍数,就remove
if (count % 3 == 0) {
list.remove(i);
i --;
}
// 累加
count ++;
}
return list.get(0);
}