黑马程序员技术交流社区

标题: 解决约瑟夫环的小程序 [打印本页]

作者: bfl625    时间: 2014-9-2 21:18
标题: 解决约瑟夫环的小程序
约瑟夫环:设有编号为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);                                                                        //把集合中的最后一个人返回
        }
}



作者: 忆梦追风    时间: 2014-9-2 21:36
走过路过,不要错过啊




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