/**
* 约瑟夫环运作如下:
* 1、一群人围在一起坐成环状(如:N)
* 2、从某个编号开始报数(如:K)
* 3、数到某个数(如:M)的时候,此人出列,下一个人重新报数
* 4、一直循环,直到所有人出列,约瑟夫环结束
* 约瑟夫环运作如下:
* 1、一群人围在一起坐成环状(如:N)
* 2、从某个编号开始报数(如:K)
* 3、数到某个数(如:M)的时候,此人出列,下一个人重新报数
* 4、一直循环,直到所有人出列,约瑟夫环结束
*/
Scanner input = new Scanner(System.in);
System.out.println("请输入人数:");
int n = input.nextInt();
System.out.println("请输入出列的数:");
int m = input.nextInt();
// 定义n个人,true代表出列
boolean[] person = new boolean[n];
int num = 0;// 记录报的数
int out = 0;// 统计出列人数
int index = 0;// 定义数组索引
while (out < n) {
if (!person[index]) {
num++;// 报数加一
if (num == m) {
out++;// 出列人数加一
num = 0;// 重新报数
person[index] = true;
System.out.println(index + 1 + "号被杀 ~");
}
}
index++;
index %= n;// 获取下一个报数的人,同时防止索引越界
}