java实现约瑟夫环可以用数组 前面已经有一篇博客是数组实现
这里主要介绍我们用list集合如何实现
代码中有详细的注释
import java.util.*;
public class 约瑟夫环 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("please input the many of people:");
int many = input.nextInt();//输入参与游戏的人数
System.out.println("please input password:");
int pass = input.nextInt();//输入密码
countThree(many, 0, pass);
}
private static void countThree(int n, int start, int m) {
List<Integer> list = new ArrayList<Integer>();//实例化list
for (int i = 1; i <= n; i++) {
list.add(i);//向list集合中添加元素
}
while (list.size() > 1) {
for (int j = 1; j < m; j++) {
list.add(list.remove(start));//不等于密码的时候拿一个出来就加到后面
}
System.out.println(list.remove(start));//等于密码的时候就输出不往集合里加了
}
System.out.println("the finally is :"+list.get(start));
}
}
附上数组实现做个比较
public class Testsan {
public static void main(String[] args){
int a[] = new int[500];//初始化数组标志
for(int i=0;i<a.length;i++){
a[i]=1;
}
int count=a.length;//计算数组长度
int san=0;//计数到三
int index=0;//描述不出来功能
while(count>1){
if(a[index]==1){//判断是否存在
san++;
if(san==3){//判断是否应该退出
a[index]=0;
san=0;
count--;
}
}
index++;
if(index==a.length)//开始新一轮
index=0;
}
for(int i=0;i<a.length;i++)
{if(a[i]==1)//判断留下来的人
System.out.println("最后留下的人是"+i);
}
}
}
数组好理解简单但是用list集合对内存什么巴拉巴拉鬼的应该比较好吧