用Java实现约瑟夫问题,先输入n个人,n个人围城一个圈,从1开始报数,每数到3的倍数的人离开圈子,循环往复直到最后圈中只剩下一人为止,求剩下的人原来在圈中的位置。 用泛型方法实现,输出格式为
时间: 2024-03-02 15:48:42 浏览: 180
好的,我来用Java实现约瑟夫问题。以下是代码实现:
```java
import java.util.ArrayList;
import java.util.List;
public class JosephusProblem<T> {
public int findLastRemaining(int n, int k) {
List<T> list = new ArrayList<>();
for (int i = 0; i < n; i++) {
list.add((T) (Integer.valueOf(i)));
}
int index = 0;
while (list.size() > 1) {
index = (index + k - 1) % list.size();
list.remove(index);
}
return (Integer)list.get(0);
}
public static void main(String[] args) {
JosephusProblem<Integer> jp = new JosephusProblem<>();
int n = 10;
int k = 3;
int result = jp.findLastRemaining(n, k);
System.out.println("剩下的人原来在圈中的位置是:" + result);
}
}
```
解释一下代码实现:
- `findLastRemaining(int n, int k)` 方法用于求解剩下的人原来在圈中的位置。其中,`n` 表示圈中的人数,`k` 表示每数到第几个人就出圈。
- 首先,我们用一个 `List` 存储圈中的人。
- 然后,我们使用 `index` 变量表示当前数到第几个人了。
- 在循环中,我们先计算出下一个出圈的人的位置 `index`,然后将其从 `List` 中移除。
- 直到 `List` 中只剩下一个人为止,这个人就是剩下的人原来在圈中的位置。
使用泛型方法实现,可以让我们更加通用地处理不同类型的数据。在本例中,我们使用了 `Integer` 类型。
最后,输出格式为:剩下的人原来在圈中的位置是:`result`。其中,`result` 是计算出来的结果。
阅读全文