public class Test05 {
/**约瑟夫环
* n个人组成圆圈,从1开始数数,当数到3个的倍数时就把那个人拉出去杀掉!
* 最后只能留下来一个人 ,这个人就是幸运的人
* 找出这个幸运的人.........
* @param args
*/
public static void main(String[] args) {
int lucklyNum = getLuckNum(8);
System.out.println(lucklyNum);
}
public static int getLuckNum(int num) {
List<Integer> list = new LinkedList<>();//创建LinkedList集合,因为该集合底层是用链表来是实现的 对元素增删比较快
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()) {//当循环到最后一个角标时 就从头开始循环
i = 0;
}
if (count % 3 == 0) {//看是不是3的倍数 如果是的就把这个元素从集合中移除
list.remove(i--);//当移除元素之后就需要把i--,因为不然会跳过一个元素
}
count++;
}
return list.get(0);//最后剩下的那个元素就是幸运的人儿啦!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
}
}
|