也谈约瑟夫环,请指正

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,先想出个结果吧,然后再优化下!

你可能感兴趣的:(算法)