Josephus环问题——顺序表求解
算法描述:
①创建一个具有number个元素的顺序表对象list。
②从第start个元素开始,依次计数,每数到distance,就将该元素删除。
③重复计数并删除元素,直到剩下一个元素。
public class SeqList_Josephus {
public SeqList_Josephus(int num, int start, int distance) {
SeqList<String> list = new SeqList<String>(num);
for(int i = 0; i<num; i++){
list.insert((char)('A'+i)+""); //表尾插入,O(1)
}
System.out.println(list.toString());
int i = start;
while(list.size() > 1){ //表中多于一个元素,继续循环
i = (i + distance - 1) % list.size(); //循环遍历
System.out.println("删除"+list.remove(i).toString()+", "); //删除i位置的元素,O(n)
System.out.println(list.toString());
}
System.out.println("被赦免者是:"+list.get(0).toString());
}
public static void main(S