public class Josephus { public static void main(String args[]) {
  int n =Integer.parseInt(args[0]) ;
  int m =Integer.parseInt(args[1]) ;
  int j;
  int jj;
  int jjj;
  int jjjj;
  int jjjjj;
  int k;
  int a[] = new int[n];
  int b[] = new int[n];
  for (jjj = 0; jjj < n; jjj++) {
   a[jjj] = jjj + 1;
   
  }
  for (int i = n; i > 1; i--) {
   k = m % i;
   for (j = 0; j < (i - 1) && k < i; j++, k++) {
    b[j] = a[k];
   }
   for (jj = j, k = 0; jj < i && k < (m % i - 1); jj++, k++) {
    b[jj] = a[k];
   }
   for (jjjjj = 0; jjjjj < n; jjjjj++) {
    a[jjjjj] = b[jjjjj];
    b[jjjjj] = 0;
   }
  }
  for (jjjj = 0; jjjj < n; jjjj++) {
   if (a[jjjj] != 0) {
    System.out.println(a[jjjj]);
   }
  }
 }
}
这个问题面试了两次了,
   结果,
  都是糊过去的,
  心理不甘!但是自己又不能解决 ,在网上搜索了很久,结果是还报错的程序,当然也改不了拉~!
   我这里抛砖引玉!, 
   有谁能说出它的思想,策略,最好是有原代码大家会一定感激不尽 !

解决方案 »

  1.   

    //这是我用List实现的。不知对否
    import java.util.*;public class Recursion1 {
    private List men=null;
    private int n;
    private int m;
    Recursion1(int n,int m){
    this.n = n;
    this.m = m;
    men = new ArrayList();
    for(int i=1;i<=n;i++){
    men.add(new Integer(i)); //?1??
    }
    }
    void getLastMan(){
    System.out.println("size:"+men+" *="+men.size());
    if(men.size()==1) return;

    int i = 0;
    if(m%men.size()==0) i = men.size()-1;
    else i = m%men.size()-1;

    System.out.println("remove No."+i);
    men.remove(i); //????0??
    getLastMan();
    }

    void prt(){
    getLastMan();
    System.out.println("The last man is:"+men.get(0));
    }

    public static void main(String[] args){
    new Recursion1(6,5).prt(); }
    }