日期:2014-05-18  浏览次数:20642 次

一道简单的算法题
一群人围成一个圈,依次1,2,3,4报数,数到4的人出列,求最后出列的哪个人!
谢谢。
题目就是这样。。
希望知道的人给个Java代码答案!

------解决方案--------------------
public class test
{
private int getPerson(List list)
{
int index = 0;
for(int i = 1;i<=list.size();i++;)
{
这个意思是如果i%4==0说明当前为应该出列的那个人,这样就三删除它。
if(i%4 ==0)
{
list.remove(i);
}
这里index的值就为最后一个删除的人的索引。
index = i;
}
由于循环一遍所删除的个数仅为list的总长度除以4的值,因为是一个圈,所以继续对list进行循环。直到里面没有已经没有4个以上元素位置
这个时候循环就返回最后一个被删除的索引。
if(list.size()>4)
{
getPerson(list);
}
return index;
}
public static void main(String[] args)
{
Test t = new Test();
//n为你人的总数
int n = 25;
List<Integer> list = new Integer<Integer>();
由于list的索引是从0开始,所以这里先为这个list添加一个站位置的值,这个值没有任何意义,为了方便在方法里面计算
真正的人的索引是从1开始的,这样在上面的循环中就从1开始判断。了
list.add(0);
for(int j = 1;j<=n;j++)
list.add(j);
t.getPerson(list);

}
}