java求解约瑟夫环问题,分别用数组和链表实现每个player包括姓名,序号等信息,并且给出详细代码及在IDEA软件上成功调试运行的步骤流程
时间: 2023-03-31 07:02:24 浏览: 136
好的,我可以回答这个问题。约瑟夫环问题是一个经典的问题,可以使用数组或链表来实现。下面是使用数组实现的代码:
```
import java.util.Scanner;
public class JosephusArray {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入总人数:");
int n = scanner.nextInt();
System.out.print("请输入报数的大小:");
int m = scanner.nextInt();
int[] array = new int[n];
for (int i = ; i < n; i++) {
array[i] = i + 1;
}
int count = ;
int index = ;
int num = n;
while (num > ) {
if (array[index] > ) {
count++;
if (count == m) {
System.out.print(array[index] + " ");
array[index] = ;
count = ;
num--;
}
}
index++;
if (index == n) {
index = ;
}
}
}
}
```
使用链表实现的代码如下:
```
import java.util.Scanner;
public class JosephusLinkedList {
static class Node {
int number;
String name;
Node next;
public Node(int number, String name) {
this.number = number;
this.name = name;
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入总人数:");
int n = scanner.nextInt();
System.out.print("请输入报数的大小:");
int m = scanner.nextInt();
Node head = new Node(1, "player1");
Node current = head;
for (int i = 2; i <= n; i++) {
Node node = new Node(i, "player" + i);
current.next = node;
current = node;
}
current.next = head;
int count = ;
while (current != current.next) {
count++;
if (count == m) {
System.out.print(current.next.number + " ");
current.next = current.next.next;
count = ;
} else {
current = current.next;
}
}
System.out.print(current.number);
}
}
```
在 IDEA 软件上成功调试运行的步骤流程如下:
1. 打开 IDEA 软件,点击 File -> New -> Project,选择 Java 项目,点击 Next。
2. 输入项目名称,选择项目存储路径,点击 Next。
3. 选择 JDK 版本,点击 Next。
4. 选择项目类型为 Console Application,点击 Next。
5. 点击 Finish,创建项目。
6. 在项目中创建两个 Java 类文件,分别为 JosephusArray 和 JosephusLinkedList。
7. 将上面的代码分别复制到对应的 Java 类文件中。
8. 点击 Run -> Run 'JosephusArray' 或 'JosephusLinkedList',运行程序。
9. 在控制台输入总人数和报数的大小,程序会输出最后留下的人的编号。
以上就是使用数组和链表实现约瑟夫环问题的详细代码及在 IDEA 软件上成功调试运行的步骤流程。
阅读全文