A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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);//最后剩下的那个元素就是幸运的人儿啦!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        }

}

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马