约瑟夫环java链表
时间: 2023-12-31 11:24:36 浏览: 33
以下是使用Java链表实现约瑟夫环的示例代码:
```java
import java.util.LinkedList;
public class JosephusCircle {
public static void main(String[] args) {
int n = 7; // 总人数
int k = 3; // 从第k个人开始报数
int m = 4; // 报到m的人出列
LinkedList<Integer> circle = new LinkedList<>();
for (int i = 1; i <= n; i++) {
circle.add(i);
}
int count = k - 1; // 从第k个人开始报数,所以初始计数器为k-1
while (circle.size() > 1) {
count = (count + m - 1) % circle.size(); // 计算出列的人在链表中的索引
circle.remove(count); // 将出列的人从链表中移除
}
System.out.println("最后留下的人的编号是:" + circle.get(0));
}
}
```
相关问题
java约瑟夫环问题循环链表
以下是Java使用循环链表解决约瑟夫环问题的示例代码:
```java
public class JosephusProblem {
public static void main(String[] args) {
int totalPeople = 5; // 总人数
int countNum = 2; // 报数到几的人出列
// 创建循环链表
Node head = new Node(1);
Node current = head;
for (int i = 2; i <= totalPeople; i++) {
current.next = new Node(i);
current = current.next;
}
current.next = head; // 形成循环
// 开始报数并出列
Node prev = null;
while (head.next != head) {
for (int i = 1; i < countNum; i++) {
prev = head;
head = head.next;
}
prev.next = head.next;
head = prev.next;
}
// 输出最后剩下的人
System.out.println("最后剩下的人是:" + head.data);
}
static class Node {
int data;
Node next;
public Node(int data) {
this.data = data;
}
}
}
```
约瑟夫问题java循环链表
约瑟夫问题是一个经典的数学问题,涉及到循环链表的应用。在约瑟夫问题中,有n个人围成一圈,从第一个人开始报数,每报到m的人出圈,然后从下一个人重新开始报数,直到所有人都出圈为止。Java中可以使用循环链表来解决约瑟夫问题。
以下是一个使用Java循环链表解决约瑟夫问题的示例代码:
```java
import java.util.LinkedList;
public class JosephusProblem {
public static void main(String[] args) {
int n = 7; // 总人数
int m = 3; // 报数到m的人出圈
LinkedList<Integer> circle = new LinkedList<>();
for (int i = 1; i <= n; i++) {
circle.add(i);
}
int index = 0; // 当前报数的人在链表中的索引
while (circle.size() > 1) {
index = (index + m - 1) % circle.size(); // 计算出圈的人在链表中的索引
circle.remove(index);
}
System.out.println("最后留下的人是:" + circle.get(0));
}
}
```
这段代码首先创建了一个LinkedList对象circle,用于表示循环链表。然后,通过循环将1到n的数字依次添加到链表中。接下来,使用一个while循环来模拟报数和出圈的过程,直到链表中只剩下一个人。在每次循环中,根据报数规则计算出圈的人在链表中的索引,并将其从链表中移除。最后,输出剩下的最后一个人。