JAVA中使用非递归法实现约瑟夫环问题

先在类名上面,包名下面导入Scanner类和Arrays类

public static void main(String[] args){

//调用Scanner方法
Scanner sc=new Scanner(System.in);
//定义并自动填满数组
System.out.print("请输入参与约瑟夫环的人数:");
int n=sc.nextInt();
int[] arr=new int[n];
for(int i=0;i<n;i++){
arr[i]=i+1;
}
//输出验证数组是否被自动填满
System.out.println(Arrays.toString(arr));
//输入循环的数
System.out.print("请输入被踢人喊的数字:");
int k=sc.nextInt();
//输入从第几个人开始报数
System.out.print("请输入开始报数人的编号:");
int x=sc.nextInt();
//开始运算
int count=1;//计数器
int p=0; //统计被踢出去的人数
for(int i=x-1;i<=arr.length;i++){//i为编号器
if(i<arr.length){//判断编号器是否超过数组长度,超过则重置,保证i始终是编号
if(arr[i]!=0){//判断该项是否为0,如果是则跳过
if(count%k!=0){//判断是否是被踢的人
count++;
}else{
arr[i]=0;
count=1;

p++;

}
if(p==arr.length-1){//判断剩余人数是否大于1,如果不大于1则break
break;
}
}
}else{
i=-1;
}
}
//输出数组中非0项就是最后一个人的编号
for(int i=0;i<arr.length;i++){
if(arr[i]!=0){
System.out.println("最后一个人的编号为:"+arr[i]);
}
}
}

猜你喜欢

转载自blog.csdn.net/chenyi1019/article/details/80904390