使用java1、约瑟夫问题 n个人围城一个圈,从1开始报数,每数到3的倍数的人离开圈子,循环往复直到最后圈中只剩下一人为止,求剩下的人原来在圈中的位置。 用泛型方法实现,输出格式为 [ans]
时间: 2024-03-02 14:48:10 浏览: 49
好的,这是一个经典的约瑟夫问题,以下是Java实现:
```java
import java.util.ArrayList;
import java.util.List;
public class JosephusProblem {
public static <T> String josephus(List<T> list, int k) {
int index = 0;
while (list.size() > 1) {
index = (index + k - 1) % list.size();
list.remove(index);
}
return "[" + list.get(0) + "]";
}
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
int n = 10;
int k = 3;
for (int i = 1; i <= n; i++) {
list.add(i);
}
System.out.println(josephus(list, k));
}
}
```
在上面的代码中,我们使用了泛型方法 `josephus` 来解决约瑟夫问题。其中,`list` 表示围成圈的人的列表,`k` 表示每数到的倍数,`index` 表示当前位置。我们使用循环来模拟每次数数和删除的过程,直到只剩下一个人为止。
在 `main` 方法中,我们创建一个大小为 `n` 的列表,并将其中的元素初始化为从 1 到 `n`,然后调用 `josephus` 方法来求解,最后输出结果即可。
阅读全文