约瑟夫生死者小游戏java
时间: 2023-11-10 07:01:35 浏览: 46
约瑟夫生死者小游戏是一个经典的问题。根据提供的Java代码,可以看出这段代码实现了约瑟夫生死者小游戏的逻辑。该代码使用了循环队列来模拟游戏的进行过程。游戏开始时,将所有人的编号添加到队列中。然后通过循环迭代的方式,依次报数并将报数到的人从队列中移除。当队列中的人数小于留下的人数时,游戏结束。通过打印出每个要下船的人的编号,可以得到死亡位置。
相关问题
约瑟夫生死者游戏数据结构
约瑟夫生死者游戏是一个经典的问题,其题意为:有$n$个人围成一圈,从第一个人开始报数,报到$m$的人出圈,剩下的人继续从1开始报数,直到剩下一人为止。现在假设有一个数组$people=[1,2,3,...,n]$,请问最后剩下的人的编号是多少?
解决该问题的一种常见算法是使用循环链表来模拟这个过程。首先将数组$people$中的所有元素按顺序添加到一个循环链表中,然后使用指针$p$指向链表头部,每次从$p$开始顺序遍历$m-1$个节点,并将$p$指向第$m$个节点,将该节点从链表中删除。重复这个过程直到链表中只剩下一个节点,即为最后剩下的人的编号。
以下是使用Python实现该算法的示例代码:
```python
class Node:
def __init__(self, val):
self.val = val
self.next = None
def josephus(people, m):
head = Node(people[0])
cur = head
for i in range(1, len(people)):
cur.next = Node(people[i])
cur = cur.next
cur.next = head
while cur.next != cur:
for i in range(m - 1):
cur = cur.next
cur.next = cur.next.next
return cur.val
```
调用该函数时,输入人数$n$和报数$m$,以及一个编号为$1$到$n$的数组$people$,函数将返回最后剩下的人的编号。
提供一份JAVA约瑟夫生死者游戏源代码
以下是JAVA版本的约瑟夫生死者游戏的源代码:
```
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class JosephusGame {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入总人数:");
int n = scanner.nextInt();
System.out.println("请输入每次数到的第几个人:");
int m = scanner.nextInt();
List<Integer> left = new ArrayList<>(); // 剩余的人的编号
for (int i = 1; i <= n; i++) {
left.add(i);
}
List<Integer> eliminated = new ArrayList<>(); // 被抛弃的人的编号
int index = 0; // 记录删除人的位置
while (left.size() > n / 2) {
index = (index + m - 1) % left.size();
eliminated.add(left.get(index));
left.remove(index);
}
// 输出结果
System.out.println("总人数:" + n + " 剩余人数:" + left.size());
System.out.print("被抛弃的人的编号:");
for (int i = 0; i < eliminated.size(); i++) {
System.out.print(eliminated.get(i) + " ");
}
System.out.println();
System.out.print("剩余每个人的编号(从小到大排序):");
left.sort(null);
for (int i = 0; i < left.size(); i++) {
System.out.print(left.get(i) + " ");
}
System.out.println();
}
}
```
使用时,只需要按照提示输入总人数和每次数到的第几个人即可。
相关推荐
![py](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)