约瑟夫生死者小游戏java
时间: 2023-11-10 13:01:35 浏览: 77
约瑟夫生死者小游戏是一个经典的问题。根据提供的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.print("请输入总人数:");
int n = scanner.nextInt();
System.out.print("请输入报数的大小:");
int m = scanner.nextInt();
// 初始化人数
List<Integer> people = new ArrayList<>();
for (int i = 1; i <= n; i++) {
people.add(i);
}
int count = 0;
int index = 0;
while (people.size() > 1) {
count++;
if (count == m) {
people.remove(index);
count = 0;
} else {
index++;
}
// 到达队尾,从头开始
if (index == people.size()) {
index = 0;
}
}
System.out.println("生死者游戏结束,幸存者是:" + people.get(0));
}
}
```
在这个代码中,我们通过Scanner类从用户输入中获取总人数n和报数的大小m。然后我们使用一个List来存储每个人的编号,从1到n。接下来,我们使用`count`变量来记录当前的报数,使用`index`变量来记录当前的位置。
在while循环中,我们模拟了报数的过程,并根据报数的结果进行相应的操作。如果报数等于m,则需要把当前位置的人从队列中移除,并把`count`清零;否则,我们需要把`index`加1,继续下一个人。当我们到达队尾时,需要从队头开始继续报数。
最终,当队列中只剩下1个人时,我们输出这个人的编号,也就是幸存者的编号。
阅读全文