import java.util.Scanner;
public class Josephus{
static void JansonLinJosephusFun(int Num,int Kill,int alive){
int[] person = new int[Num];
//这里是给数组赋值,为0的是活,1的自杀
for(int i=0;i<person.length;i++){
person[i] = 0;
}
int count = 0;//记录人数
int pos=-1;
boolean flag = true;
while (flag){
int i=0;//记录人的个数与淘汰值比较
int num=0;
do{
pos = (pos+1)%Num;//数组环化处理
if(person[pos]==0)
i++;
if(i==Kill){
person[pos]=1;//与淘汰数相等则标记为1
break;
}
}while (true);
for(int j=0;j<Num;j++){
if(person[j]==0)
num++;
}
if(num==alive){//剩余人数与可未被淘汰数比较
flag = false;
}
}
for(int i=0;i<person.length;i++){
if(person[i]==0){
System.out.println("未淘汰的位置"+(i+1));
}
}
}
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("输入总人数:");
int Num = sc.nextInt();
System.out.println("输入可以存活的人数:");
int alive = sc.nextInt();
System.out.println("输入第几个人会被淘汰:");
int Kill = sc.nextInt();
JansonLinJosephusFun(Num,Kill,alive);
}
}
运行结果:
如果错误 ,欢迎指正!