顺序表应用——求解Josephus问题(java)

Josephus问题:古代某法官要判决number个犯人的死刑,他有一条荒唐的法律:让囚犯站成一个圆圈,从第start个人开始数起,每数到第distance个犯人,就拉出去处决,然后再次数distance个人,再次进行处决,,,,直到最后只剩一个人,这个人会被赦免,当number = 5,start = 0,distance = 3时,过程如下:


代码如下:

package list;

public class Josephus {

	public Josephus(int number, int start, int distance) {
		System.out.println("Josephus(" + number + "," + start + "," + distance + ")");
		SeqList<String> list = new SeqList<String>(number);
		
		for (int i = 0; i < number; i++) {
			list.insert((char) ('A' + i) + "");  //这里的技巧要记一下,依次插入A,B,,,
		}
		
		int i = start;
		
		while (list.size() > 1) {  //这个循环也很经典
			i = (i - 1 + distance) % list.size();   //i-1是为了将序号转为数组对应元素
			System.out.print("删除" + list.remove(i).toString() + ",");
			System.out.println(list.toString());
		}
		System.out.println("被赦免者是:" + list.get(0).toString());

	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new Josephus(5, 0, 2);   //测试例子

	}

}

显示结果如下:


注意上述代码,要和导入SeqList类(顺序表)才可以执行

猜你喜欢

转载自blog.csdn.net/yuangan1529/article/details/80151809