- public class Test {
-
- public static int[] Joshphus(int start,int step,int size){ //start:从第几个人开始,step:报多少数走一个,size:一共多少人
- int[] arInt=new int[size];
- //1.初始化数组,把每个人编上号
- for(int i=0;i<size;i++)
- arInt[i]=i;
- //2.先把开始报数的人挪到最前面的位置,就是arInt[0]
- for(int i=start;i!=0;i--){
- int temp=arInt[0];
- for(int j=0;j<size;j++){
- if(j!=size-1)
- arInt[j]=arInt[j+1];
- else
- arInt[j]=temp;
- }
- }
- //3.开始报数
- int currentSize=size; //还剩多少人
- int p=0; //该第几个人报数了
- int num=1; //报数报到几了
-
- while(currentSize>0){
- if(num==step){ //报到step,这哥们出列了
- int temp=arInt[p]; //出列的哥们要放到数组最后,先把他存起来
- for(int i=p;i<size-1;i++)
- arInt[i]=arInt[i+1];
- arInt[size-1]=temp;
- num=1;
- if(p==--currentSize) //这里p就不用前移了,因为后面的人已经自动顶上来了
- p=0; //但是p指向最后一个的话,要把p挪到最前面去
- }else{ //还没报到step
- num++;
- if(++p==currentSize)
- p=0;
- }
- }
- return arInt;
- }
-
- public static void main(String[] args){
- int[] arInt=Joshphus(2,3,7);
- for(int i:arInt)
- System.out.print(i+" ");
- }
-
- }
复制代码 |