我正在尝试用数组列表解决约瑟夫斯问题。我注意到即使我在它被杀死后删除并索引它仍然出现在我的输出中。
为什么应该删除的 2 又出现了?
以下是我当前的输出:
There are 7 people in the circle.
1, 2, 3, 4, 5, 6, 7
2
2, 4
2, 4, 1
2, 4, 1, 3
2, 4, 1, 3, 2
2, 4, 1, 3, 2, 0
You should sit in seat 4 if you want to survive!
public class project1 {
public static int Josephus (int n, int k){
ArrayList<Integer> circle = new ArrayList<Integer>();
for (int p = 1; p <= n; p++) {
circle.add(p);
}
System.out.println("There are " + n + " people in the circle.");
System.out.println(circle);
ArrayList<Integer> kill_order = new ArrayList<Integer>();
for (int index=1; circle.size()!=1; index++){
if (circle.size() > 1){
index = (index + k - 1) % circle.size();
kill_order.add(index);
circle.remove(index);
System.out.println(kill_order);
} else if (circle.size()==1){
System.out.println("Execution Order: " + kill_order + " ");
index = 1;
}
}
return circle.get(0);
}
public static void main(String[] args) {
System.out.println("You should sit in seat " + Josephus(7, 2) + " if you want to survive!");
}
}