/**
* java编程题:50个人围成一圈数到3和3的倍数时出圈,问剩下的人是谁,在原来的位置是多少?
*/
public class Test {
public static void main(String[] args) {
System.out.println("该数字原来的位置是:" + cycle(50, 3));
}
/**
*
* @param total
* @param k
* @return
*/
public 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));
int index = -1; // 定义下标,模拟已经去掉一个元素,因此从-1开始
while (dataList.size() > 1) { // 一直循环去除数据,直到只剩下一个元素
index = (index + k) % dataList.size(); // 得到应该出局的下标
dataList.remove(index--); // 去除元素
}
return ((Integer) dataList.get(0)).intValue(); // 返回它的值
}
}
打印结果:
该数字原来的位置是:11