用javan个人围城一个圈,从1开始报数,每数到3的倍数的人离开圈子,循环往复直到最后圈中只剩下一人为止,求剩下的人原来在圈中的位置。 用泛型方法实现,输出格式为 [ans]
时间: 2024-03-04 21:49:23 浏览: 18
好的,这是一个经典的约瑟夫问题,可以用循环链表来解决。下面是用 Java 实现的泛型方法:
```java
import java.util.LinkedList;
public class JosephusProblem {
public static <E> E josephus(LinkedList<E> list, int k) {
int index = 0;
while (list.size() > 1) {
index = (index + k - 1) % list.size();
list.remove(index);
}
return list.getFirst();
}
public static void main(String[] args) {
LinkedList<Integer> list = new LinkedList<>();
int n = 10;
int k = 3;
for (int i = 1; i <= n; i++) {
list.add(i);
}
int ans = josephus(list, k);
System.out.println("[" + ans + "]");
}
}
```
这个方法接受一个 LinkedList 和一个整数 k,表示每数到 k 的人要离开圈子。循环中,我们先计算出下一个要删除的人的位置 index,然后将其从链表中删除。最后,当链表中只剩下一个元素时,就是最终的答案。这个方法返回的是剩下的元素,所以我们可以直接输出 [ans]。