用java实现约瑟夫(Joseph)环输出形式:建立一个输出函数,将正确的出列顺序输出。
时间: 2024-02-27 21:51:41 浏览: 56
下面是Java实现约瑟夫环的代码,包括输出函数的实现:
```java
import java.util.Scanner;
public class JosephCircle {
static class Node {
int number; // 节点编号
int password; // 节点密码
Node next; // 下一个节点
public Node(int number, int password) {
this.number = number;
this.password = password;
}
}
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();
Node head = null, prev = null;
for (int i = 1; i <= n; i++) {
System.out.print("请输入第" + i + "个人的密码:");
int password = scanner.nextInt();
Node node = new Node(i, password);
if (i == 1) {
head = node;
} else {
prev.next = node;
}
prev = node;
}
prev.next = head; // 链表首尾相连
int index = 0;
StringBuilder sb = new StringBuilder();
sb.append("出列顺序:[");
while (head.next != head) {
for (int i = 1; i < m - 1; i++) {
head = head.next; // 找到要删除节点的前一个节点
}
Node node = head.next; // 要删除的节点
sb.append(node.number).append(","); // 将出列顺序添加到字符串中
head.next = node.next; // 删除节点
head = head.next; // 下一个节点成为新的头结点
}
sb.append(head.number).append("]");
System.out.println(sb.toString()); // 输出出列顺序
}
}
```
在这个程序中,我们在主要逻辑中使用了一个`StringBuilder`对象来记录出列顺序。每次从链表中删除节点时,将节点的编号添加到字符串中。最后,将字符串输出即可。
阅读全文