约瑟夫josephu算法

一、链表实现
import java.util.LinkedList;
import java.util.List;

public class KillProgramer{
	private List sL = new LinkedList();
	private int killNum = 4;
	private int sizeLen = 0;
	
	public void init(int count,int killNum){
		int i = 1;
		while(i <= count){
			sL.add(i++);
		}
		this.killNum = killNum;
		System.out.println(count+"个程序猿围成一个圈做游戏,还开心啊好开心……");
		System.out.println("PM says:谁是number "+killNum+"谁就得死!哇哈哈哈哈……");
	}
	public void killS(){
		int i = 1;
		int j = 0;//每个学生的下标
		sizeLen = sL.size();
		while(sizeLen>0){
			if(i==killNum){//杀死j对应的
				System.out.println("杀死"+sL.get(j));
				sL.remove(j);
				j--;//去除一个后,下标应该减一
				i = 1;//重新开始唱号
				sizeLen = sL.size();
			}else{
				i++;
			}
			if(sizeLen!=0){
				j = ++j%sizeLen;//这儿使链表变成了一个循环链表
			}
		}
		System.out.println("没有程序猿……世界好美好……");
	}
	public static void main(String[] args){
		KillProgramer kP = new KillProgramer();
		kP.init(9, 4);
		kP.killS();
	}
}

结果:

9个程序猿围成一个圈做游戏,还开心啊好开心……

PM says:谁是number 4谁就得死!哇哈哈哈哈……
杀死4
杀死8
杀死3
杀死9
杀死6
杀死5
杀死7
杀死2
杀死1

没有程序猿……世界好美好……

二、数组实现

public class Test {
	int[] people;
	public int n,m;
	public void run(){
		people = new int[n];
		int i=0;
		while(i



你可能感兴趣的:(程序员面试宝典)