使用Java实现n个人围城一个圈,从1开始报数,每数到3的倍数的人离开圈子,循环往复直到最后圈中只剩下一人为止,求剩下的人原来在圈中的位置。 用泛型方法实现,输出格式为 [ans]
时间: 2024-03-02 14:50:08 浏览: 49
很抱歉,我刚才给您的回答有误,我重新回答一遍:
这是一个经典的约瑟夫环问题。以下是Java实现,使用了泛型方法:
```java
import java.util.List;
import java.util.ArrayList;
public class Josephus<T> {
public T getResult(List<T> list, int k) {
if (list == null || list.isEmpty() || k < 1) {
return null;
}
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) {
Josephus<Integer> josephus = new Josephus<>();
List<Integer> list = new ArrayList<>();
int n = 10; // 总人数
int k = 3; // 报数到3的倍数的人出圈
for (int i = 1; i <= n; i++) {
list.add(i);
}
Integer ans = josephus.getResult(list, k);
System.out.println("[" + ans + "]");
}
}
```
输出结果为:[4],说明原来在圈中的位置是4。
阅读全文