- package com.heima.test;
- import java.util.ArrayList;
- public class Test12_约瑟夫环 {
- /*
- * 杀人游戏,遇4则杀
- *
- * 分析
- * 1.用集合存储人,一共一百人 ArrayList<> list
- * 2.遍历集合,判断若是4或4的倍数,就杀掉那个人
- * 3.防止索引越界,每当索引等于list.size()时,把索引置为0
- * 4.约瑟夫环最后剩一人
- */
- public static void main(String[] args) {
- System.out.println(getLuckyNum(100));
- }
- public static int getLuckyNum(int num) {
- ArrayList<Integer> list = new ArrayList<>(); //在这里我就直接用数字代替了
- for (int i = 1; i <= num; i++) {
- list.add(i); //给集合中添加元素
- }
- int count = 1; //用来报数
- for (int i = 0; list.size() > 1; i++) { //集合中大于一个人就不断的杀人
- if (i == list.size()) { //如果索引已经等于list.size(),并且该集合中剩的不止一个人
- i = 0; //那么,将索引置为1,就像一个圆圈一样继续数
- }
- if (count % 4 == 0) { //逢4就杀人
- list.remove(i--); //集合中删除一个元素,后边的元素就会向前挪,防止漏掉逢4后的元素
- }
- count++;
- }
- return list.get(0); //最后集合中只剩一个,直接就可以用0索引获取.
- }
- }
复制代码 |