import java.util.ArrayList;
import java.util.List;
public class Josephus {
//约瑟夫环的算法
public static void main(String[] args) {
int result;
int temp;
List list=new ArrayList();
//初始的N
if(args[0]==null) args[0]="0";
//初始的上限值M
if(args[1]==null) args[1]="0";
int n=Integer.parseInt(args[0]);
int m=Integer.parseInt(args[1]);
//将N个数计入队列
for(int i=1;i<=n;i++){
Integer ii=new Integer(i);
list.add(ii);
}
while(list.size()>1){
int size=list.size();
temp=m;
//不到一轮,出数
if(size>=temp){
result=temp;
m=Integer.parseInt(list.get(result-1).toString());
System.out.println(list.get(result-1));
list.remove(result-1);
size--;
}else{//多于一轮,出数
result=m%size;
if(result==0) result=size;
m=Integer.parseInt(list.get(result-1).toString());
System.out.println(list.get(result-1));
list.remove(result-1);
size--;
}
//出数后组成新的队列覆盖前队列
List templist=new ArrayList();
for(int jj=result-1;jj<list.size();jj++){
templist.add(list.get(jj));
}
for(int ii=0;ii<result-1;ii++){
templist.add(list.get(ii));
}
list=templist;
//System.out.println(list);
}
System.out.println("The last one is:--"+list.get(0));
}
}
个人认为效率极差,因为要重新生成环的list,先想出个结果吧,然后再优化下!