约瑟夫环:设有编号为1,2,……,n的n(n>0)个人围成一个圈,从第1个人开始报数,报到3的倍数时停止报数,报3的人出圈,从他的下一个人起接着报数,报到3 的倍数时停止报数,此人的出圈,……,如此下去,直到剩下最后一个为止。
实现的小程序如下:仅供参考哦。
public class Test{
public static void main(String[] args) {
System.out.println(getLucklyNum(500));
}
public static int getLucklyNum(int num) {
ArrayList<Integer> list = new ArrayList<>(); //创建ArrayList集合
for(int i = 1; i <= num; i++) { //遍历num数字
list.add(i); //将1到num添加到集合中
}
int count = 1; //数数的变量
for(int i = 0; list.size() != 1; i++) { //只要集合中的元素不是一就循环
if(i == list.size()) { //如果i是超过了最大索引
i = 0; //重新置为0
}
if(count % 3 == 0) { //数到了3的倍数
list.remove(i--); //出圈
}
count++; //循环一次数数变量自增一次
}
return list.get(0); //把集合中的最后一个人返回
}
}
|