黑马程序员技术交流社区

标题: 约瑟夫环理论题,蛮经典的算法.可能你也会碰到的哦 [打印本页]

作者: 悠然丶    时间: 2014-4-25 13:22
标题: 约瑟夫环理论题,蛮经典的算法.可能你也会碰到的哦
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);//最后剩下的那个元素就是幸运的人儿啦!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        }

}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2