// 移动元素 只需要将前面的元素覆盖 要移动的开始位置 移动的最后一个位置
private static void moveItem(int[] arr, int start, int stop) {
for (int i = start; i < stop - 1; i++) {
arr[i] = arr[i + 1];
}
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 读入变量
int n = in.nextInt();
int[] data = new int[n];
// 读入数据
for (int i = 0; i < n; i++) {
data[i] = i + 1;
}
// 当前要 踢出 的元素
int now = 0;
int dis = in.nextInt();
// 移动的距离 因为移动后 当前位置就是1 所以只需要移动 dis-1个 位置
dis = dis - 1;
// 先把数据拿出来 再移动覆盖就行
// 用n 表示数据的个数
int count=1; //计数
while (n > 0) {
// 算下一个被踢出的元素
now = (now + dis) % n;
System.out.printf("第%d个被踢出的编号:",count++);
System.out.println(data[now]);
moveItem(data, now, n);
n--;
}
}
}
约瑟夫环之基于数组
最新推荐文章于 2022-07-19 00:10:24 发布