一、链表实现
杀死4
杀死8
杀死3
杀死9
杀死6
杀死5
杀死7
杀死2
杀死1
import java.util.LinkedList;
import java.util.List;
public class KillProgramer{
private List<Integer> sL = new LinkedList<Integer>();
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<n){//初始化
people[i++]=1;
}
peopleShow();
i = 0;
int curI = 0;//当前指向的人
while(i++<n){//总共循环n次,全部剔除
int sayN = 0;//当前人的号码
while(sayN<m){
if(curI==n){
curI = 0;
}
if(people[curI]==1){//这个人存在
sayN++;
}
curI++;
}
people[curI-1]=0;
System.out.println("剔除:"+(curI));
peopleShow();
}
}
public void peopleShow(){
for(int temp:people){
System.out.print(temp + " ");
}
}
public static void main(String[] args) {
Test t = new Test();
t.n = 9;
t.m = 4;
t.run();
}
}