任务描述:
有n个人围成一个圆圈分别编号1~n,从第1个到m循环报数,凡是报到m者离开,求n个 人离开圆圈的次序。
任务要求:
代码示例:
package M0317_0331;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class m240326 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入数值n, m: ");
int n = scanner.nextInt();
int m = scanner.nextInt();
List<Integer> result = josephus(n, m);
System.out.println("输出结果示例:");
for (Integer integer : result) {
System.out.print(integer + " ");
}
}
public static List<Integer> josephus(int n, int m) {
List<Integer> result = new ArrayList<>(); // 用于存放结果的列表
List<Integer> list = new ArrayList<>(); // 用于存放初始元素的列表
// 初始化列表,添加1到n的元素
for (int i = 1; i <= n; i++) {
list.add(i);
}
int index = 0; // 当前操作的索引
// 循环删除元素,直到列表为空
while (!list.isEmpty()) {
// 计算下一个要删除的元素的索引
index = (index + m - 1) % list.size();
// 删除该元素,并将其添加到结果列表中
result.add(list.remove(index));
}
return result;
}
}