0%

Josephus问题

题目

Josephus问题。在这个古老的问题中,N个身陷绝境的人一致同意通过以下方式减少生存人数。他们围坐成一圈(位置记为0到N-1)并从第一个人开始报数,报到M的人会被杀死,直到最后一个人留下了。传说中Josephus找到了不会被杀死的位置。编写一个Queue的用例Josephus,从命令行接受N和M并打印出人们被杀死的顺序

输入

% java Josephus 7 2

输出

1 3 5 0 4 2 6


代码示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Josephus {
public static void main(String[] args) {
int N = Integer.parseInt(args[0]);
int M = Integer.parseInt(args[1]);
Queue<Integer> queue = new Queue<Integer> ();
for (int i = 0; i < N; i++) { queue.enqueue(i); }
while (!queue.isEmpty()) {
for (int i = 0; i <M-1; i++) {
queue.enqueue(queue.dequeue()); //未报到M的人从队头出列,接着从队尾入列
}
System.out.print(queue.dequeue() + " ");//报到M的人从队头出列,并打印
}
System.out.println();
}
}

解决了!