Java数据结构:Josephus环问题

题目:古代法官处决犯人,从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是被赦免的人

猜你喜欢

转载自blog.csdn.net/qq_42192693/article/details/82594034