题目:古代法官处决犯人,从start个人开始数起,每distance个犯人,就处决,剩下一个犯人赦免,求赦免的人
public class MyList implements IList {
private Object[] listElem;
private int curLen;
public MyList(int maxSize) {
curLen = 0;
listElem = new Object[maxSize];
}
public void clear() {
curLen = 0;
}
public boolean isEmpty() {
return curLen == 0;
}
public int length() {
return curLen;
}
public Object get(int i) {
return listElem[i];
}
public void insert(int i, Object x) {
if (i < 0 && i > curLen) {
System.out.println("插入位置不正确");
}
for (int j = curLen; j > i; j--) {
listElem[j] = listElem[j - 1];
}
listElem[i] = x;
curLen++;
}
public void remove(int i) {
if (i < 0 || i > curLen) {
System.out.println("移除位置不正确");
} else {
for (int j = i; j < curLen - 1; j++) {
listElem[j] = listElem[j + 1];
}
curLen--;
}
}
public int indexOf(Object x) {
for (int i = 0; i < listElem.length; i++) {
if (listElem[i].equals(x)) {
return i;
}
}
return -1;
}
public void display() {
for (int i = 0; i < curLen; i++) {
System.out.print(listElem[i] + " ");
}
}
public static void main(String[] args) {
MyList a = new MyList(10);
a.insert(0, 's');
a.insert(1, 's');
a.insert(2, 'q');
a.display();
int order = a.indexOf('q');
System.out.println(order);
a.remove(1);
System.out.println();
a.display();
System.out.println(a.length());
}
}
public class Josephus {
public static void main(String[] args) {
new Josephus(5,0,2);
}
public Josephus(int number, int start, int distance) { //总人数,开始位置,距离
MyList list = new MyList(number);
for (int i = 0; i < number; i++) { //给顺序表赋值,A,B,C,D,E
list.insert(i, (char) ('A' + i) + "");
}
int i = start;
while (list.length() > 1) { //开始执行循环,直到剩余一个人
i = (i + distance - 1) % (list.length()); //从start开始,每次增加距离distance
list.remove(i); //移除执行处决的人
}
System.out.println("被赦免者为"+list.get(0));
}
}
结果:E是被赦免的人