ジョセフリングについてもお話ししますので、ご指摘ください

1612 ワード


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));
	}
}

個人的には効率が悪いと思いますが、ループのリストを再生成するので、まず結果を考えてから最適化しましょう.