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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© bfl625 中级黑马   /  2014-9-2 21:18  /  1018 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

约瑟夫环:设有编号为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);                                                                        //把集合中的最后一个人返回
        }
}


评分

参与人数 1黑马币 +15 收起 理由
七丶哥 + 15 感谢啊,正困惑着呢

查看全部评分

1 个回复

倒序浏览
走过路过,不要错过啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马