import java.util.LinkedList;
import java.util.List;
/**
* 50个人围成圈,数到3和3的倍数时出圈,求剩下的人及其原来的位置
* @author Joson.Liu
* 2014.08.27
*/
public class Circle {
public static void main(String args[]){
System.out.println("剩下的人其原来位置为"+cycle(50,3));
}
private static int cycle(int total,int k){
List<Integer> dataList=new LinkedList<Integer>();//用链表进行存储
for(int i=0;i<total;i++)//初始化链表
dataList.add(new Integer(i+1));
//定义下标,模拟已经去掉一个元素,因此从-1开始
int index=-1;
//一直循环去除数据,直到只剩下一个元素
while(dataList.size()>1){
index=(index+k)%dataList.size();
dataList.remove(index--);
}
return dataList.get(0);
}
}
亮点:
充分利用了取余的特性及链表特性,当然也可以用数组存储,这个自己考虑。