1.3.37 Josephus问题
题目:
Josephus问题。在这个古老的问题中, N个身陷绝境的人一致同意通过以下的方式减少生存人数。他们围坐成一圈(位置记为0到N-1)并从第一个人开始报数, 报到M的人会被杀死, 直到最后一个人留下来。传说中Josephus找到了不会被杀死的位置。编写一个Queue的用例Josephus, 从命令行接受N和M并打印出人们被杀死的顺序(这也将显示Josephus在圈中的位置)。
输入:
$ java Josephus 7 2
输出:
1 3 5 0 4 2 6
思路:
交换不断交换两个队列, 直到所有元素出栈为止
import java.util.Scanner; |
改进:
但看了书中给出的解答之后, 大为吃惊, 他竟然在头部出列,同时, 在尾部入列
public class Josephus { |
Output:$ java Josephus 7 2
1 3 5 0 4 2 6
队列头进尾出的策略, 你理解了多少?