使用java约瑟夫问题 n个人围城一个圈,从1开始报数,每数到3的倍数的人离开圈子,循环往复直到最后圈中只剩下一人为止,求剩下的人原来在圈中的位置。 用泛型方法实现,输出格式为 [ans]
时间: 2024-03-02 10:50:44 浏览: 14
好的,我知道你要求的是什么。以下是Java实现:
```java
public class JosephusProblem {
public static <T> T josephus(T[] arr, int k) {
if (arr == null || arr.length == 0 || k <= 0) {
return null;
}
List<T> list = new LinkedList<>(Arrays.asList(arr));
int idx = 0;
while (list.size() > 1) {
idx = (idx + k - 1) % list.size();
list.remove(idx);
}
return list.get(0);
}
public static void main(String[] args) {
Integer[] arr = {1, 2, 3, 4, 5, 6, 7};
int k = 3;
Integer ans = josephus(arr, k);
System.out.println("[" + ans + "]");
}
}
```
输出结果为:
```
[4]
```
其中,`josephus` 方法接受一个泛型数组和一个整数 `k`,返回最后剩下的元素。在方法中,我们先将数组转换成 `LinkedList`,然后按照约瑟夫问题的规则,依次删除每个第 `k` 个元素,直到只剩下一个元素为止。最后返回这个元素即可。