使用集合类解决这个问题
时间: 2024-11-25 20:17:47 浏览: 4
Java 常见问题解决集合.docx
使用集合类来解决约瑟夫环问题,我们可以利用 Java 中的 List 类,因为 List 的索引操作方便我们模拟报数过程。以下是一个使用 ArrayList 实现的例子:
```java
import java.util.ArrayList;
import java.util.List;
public class JosephusWithCollections {
public int findLastMan(int n, int k) {
List<Integer> people = new ArrayList<>(List.of(1, 2, 3, // 初始化数组,假设有三个人
// ... 以此类推,直到第 n 个人
n));
while (people.size() > 1) { // 当列表还剩两个人以上时
for (int i = 0; i < k - 1; i++) { // 报数 k-1 次
people.remove(i); // 删除报到的人
}
}
return people.get(0); // 返回最后剩下的那个人的位置
}
public static void main(String[] args) {
int n = 50; // 总人数
int k = 3; // 报数规则
JosephusWithCollections josephus = new JosephusWithCollections();
int ans = josephus.findLastMan(n, k);
System.out.println("最后一人位置: " + ans);
}
}
```
在这个例子中,我们首先创建一个包含所有人的列表,然后通过遍历和移除元素的方式模拟报数过程,直到只剩下一个元素。这种方法虽然不如递归直观,但更利于处理大数据量的情况。
阅读全文