约瑟夫环 java完整代码
时间: 2023-03-14 13:03:59 浏览: 78
答:以下是约瑟夫环的 Java 完整代码:
public class Josephus {
public static void main(String[] args) {
int n = Integer.parseInt(args[0]);
int m = Integer.parseInt(args[1]);
ArrayList<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < n; i++)
list.add(i);
int index = 0;
while (list.size() > 1) {
index = (index + (m - 1)) % list.size();
System.out.println(list.remove(index));
}
System.out.println(list.get(0));
}
}
相关问题
约瑟夫环用java代码
约瑟夫环是一个经典的数学问题,可以用循环链表来实现。以下是用Java代码实现约瑟夫环的示例:
```java
import java.util.LinkedList;
public class JosephusCircle {
public static int josephus(int n, int k) {
LinkedList<Integer> circle = new LinkedList<>();
for (int i = 1; i <= n; i++) {
circle.add(i);
}
int index = 0;
while (circle.size() > 1) {
index = (index + k - 1) % circle.size();
circle.remove(index);
}
return circle.get(0);
}
public static void main(String[] args) {
int n = 7; // 总人数
int k = 3; // 报数到k的人出列
int survivor = josephus(n, k);
System.out.println("最后幸存者的编号是:" + survivor);
}
}
```
在上面的代码中,我们使用了一个循环链表来表示约瑟夫环,初始时将所有人的编号添加到链表中。然后,我们通过循环和取模运算来模拟报数和出列的过程,直到只剩下最后一个人为止。
运行上述代码,将输出最后幸存者的编号。
约瑟夫环java代码实现,运用链表
好的,以下是约瑟夫环的Java代码实现,使用了链表:
```java
class Node { //定义节点类
int data;
Node next;
public Node (int data) {
this.data = data;
}
}
class JosephusCircle { //约瑟夫环类
Node head = new Node(1); //链表头结点默认为1
int size;
int target;
public JosephusCircle(int size, int target) {
this.size = size; //设定链表长度
this.target = target; //设定固定步长
Node cur = head;
for (int i = 2; i <= size; i++) { //生成链表
cur.next = new Node(i);
cur = cur.next;
}
cur.next = head; //让最后一个节点指向头结点形成一个环
}
public void execute() { //执行约瑟夫环
Node cur = head;
while (size > 1) { //当链表长度大于1时循环执行
for (int i = 1; i < target; i++) { //按步长移动节点
cur = cur.next;
}
System.out.print(cur.next.data + " "); //输出要删除的节点的值
cur.next = cur.next.next; //删除节点
size--; //链表长度减1
}
System.out.println("\nThe survivor is: " + cur.data); //输出最后幸存者的值
}
}
public class Main {
public static void main(String[] args) {
JosephusCircle jc = new JosephusCircle(7, 3); //初始化环
jc.execute(); //执行约瑟夫环
}
}
```
此处运用了链表来实现,首先生成长度为 size 的链表,然后将最后一个节点指向头结点,形成一个环。执行约瑟夫环时,按照题目指定的步长 target 移动节点,输出要删除的节点的值,并删除节点,同时将链表长度减1。当链表长度为1时,输出最后幸存者的值。