留来吧!正好也是我的老师给我留的作业....分享一下吧.
附上我的代码 这个程序都是从第一个人开始数起的,,,不像楼主说的从第K个位置数M...
import java.util.ArrayList;
import java.util.Scanner;
/*
* 约瑟夫环
*/
public class YueSeFuHuan {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("输入一共有多少个囚犯");
ArrayList<Integer> al = new ArrayList<>();
int x = sc.nextInt();
for (int i = 1; i <= x; i++) {
al.add(i);
}
//以count为计数器,开始遍历集合前先自加1,如果计数器为3的倍数,则将其对应的元素移除
//如果遍历的脚标为最后一个脚标,则将脚标置为-1,因为for循环内还要执行自加运算
//当集合的size为1是,break结束遍历,并且打印输出集合.
int count = 0;
System.out.println("囚犯的编号为:"+al);
for (int j = 0; j < al.size(); j++) {
count++;
if (count % 3 == 0) {
al.remove(j--);
}
if (j == al.size()-1 ) {
j=-1;
}
if (al.size()==1) {
break;
}
}
System.out.println("最后的存活者为" + al);
sc.close();
}
}
|