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