日期:2014-05-20  浏览次数:20774 次

求高手来给点思路,算法学得不好。。。
有500个小朋友拉成一个圆圈,从其中一个小朋友开始依次编号1-500,从1号小朋友开始循环1-3报数,数到3的小朋友就退出。编写一个Java应用程序,计算出最后一个小朋友的号码是多少?

我估计我的代码明显错了,理解有问题,好像不是这样做的,求解?
package Four;

import java.util.ArrayList;
import java.util.List;

public class A5 {
public static int getNumber(List<Integer> list){
int number=0;
for(int i=0;i<list.size();i++){
if((i+1)%3==0){list.set(i,0);}
}
for(int i=0;i<list.size();){
if(list.get(i)==0){
list.remove(i);continue;
}
i++;
}
if(list.size()==3){number=list.get(2);}
else{number=getNumber(list);}
     return number;

}
public static void main(String args[]){
ArrayList<Integer> list=new ArrayList<Integer>();
for(int i=1;i<=500;i++)
list.add(i);
System.out.println("最后一个退出的编号是"+getNumber(list));

}

}

------解决方案--------------------
约瑟夫环
------解决方案--------------------
 用LinkedList吧