java4. 有M个人围成一圈,每人一个的编号(1.2.3.....M),从第一个人数起,报到N时这个人就出圈。再继续数,数到N时这个人又出圈。直到只剩下一个人为止,输出出圈人的顺序。M、N从键盘输
时间: 2024-05-25 09:17:36 浏览: 67
入。
思路:模拟约瑟夫环问题,使用一个数组记录每个人的编号,并用一个循环队列来模拟出圈的过程,直到剩下最后一个人为止。
代码实现:
import java.util.Scanner;
public class JosephusRing {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入M:");
int M = scanner.nextInt();
System.out.print("请输入N:");
int N = scanner.nextInt();
int[] nums = new int[M];
for (int i = 0; i < M; i++) {
nums[i] = i + 1;
}
int count = M;
int index = 0;
int[] queue = new int[M];
while (count > 1) {
for (int i = 0; i < N - 1; i++) {
queue[index] = nums[index];
index = (index + 1) % M;
}
System.out.println(nums[index] + " 出圈");
index = (index + 1) % M;
count--;
}
System.out.println("剩下的是:" + nums[index]);
}
}
输入示例:
请输入M:10
请输入N:3
输出示例:
3 出圈
6 出圈
9 出圈
2 出圈
7 出圈
1 出圈
8 出圈
5 出圈
10 出圈
剩下的是:4
阅读全文