实现方法有很多种,参考大佬的方法自己试了一下
如下
/**
* 约瑟夫环的java实现
* 设N个人围坐,从K的位置开始报数,到M的位置
* 此人出列,下一个继续报数,所有人出列,终止
* @param totalNum 总人数
* @param cycleNum 报数值
* @param index 起始位置
*/
public static void josephus(int totalNum, int cycleNum,int index) {
// 把所有人列入集合
List<Integer> start = new ArrayList<Integer>();
for (int i = 1; i <= totalNum; i++) {
start.add(i);
}
//把k设为起始坐标
int k = index-1<0?0:index-1;
while (start.size() >0) {
//赋值
k = (k + cycleNum)%start.size();
//第m个人的索引位置等于
k = k % (start.size()) - 1;
// 判断是否到队尾
//输出该值后删除
if (k < 0) {
System.out.println(start.get(start.size()-1));
start.remove(start.size()-1);
k = 0;
} else {
System.out.println(start.get(k));
start.remove(k);
}
}
}