Algs4-1.3.37Josephus问题

1.3.37Josephus问题。在这个古老的问题中,N个身陷绝境的人一致同意通过以下方式减少生存人数。他们围坐成一圈(位置记为0到N-1)并从第一个人开始报数,报到M的人会被杀死,直到最后一个人留下来。传说中Josephus找到了不会被杀死的位置。编写一个Queue的用例Josephus,从命令行接受N和M并打印出人们被杀死的顺序(这也将显示Josephus在圈中的位置)。
% java Josephus 7 2 
1350426
答:
图片
public class test
{
   public static void main(String[] args)
   {
      int N=Integer.parseInt(args[0]);
      int M=Integer.parseInt(args[1]);
      boolean[] a=new boolean[N];
      Queue<Integer> q=new Queue<Integer>();
      for(int i=0;i<N;i++)
          a[i]=true;
      //
      int remain=N;
      int i=0;
      int say=0;
      while(remain!=0)
      {
          if(a[i]) say++;
          if(say==M)
          {
              say=0;
              a[i]=false;
              remain--;
              q.enqueue(i);
          }
          i++;
          if(i==N) i=0;
       }//end while
       for(Integer item:q)
           StdOut.print(item+" ");
   }//end main
  }//end class

posted @ 2018-10-26 08:39  修电脑的龙生  阅读(180)  评论(0编辑  收藏  举报