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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 caolufo 于 2016-8-4 16:53 编辑

最近,各种百度约瑟夫环问题解决代码,发现网络大神给的代码量最简单的一个,使用ArrayList及其add()和remove()方法完成,功能实现部分仅使用7条语句(其中4条还是声明变量和循环条件语句),分享一下。
[Java] 纯文本查看 复制代码
import java.util.ArrayList;
import java.util.List;

public class Baoshu {

        public static void main(String[] args) {
                //50个人,从第一个人开始数,数到3的人出列
                countThree(50, 0, 3);                
        }
        
        /**
         * 约瑟夫环:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。
         * 从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,
         * 数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。
         * 
         * @param n        人的总数
         * @param start        开始报数的序号,start < n
         * @param m 出列的标记(可以大于n)
         */
        private static void countThree(int n, int start, int m) {
                
                List<Integer> list = new ArrayList<Integer>();
                //初始化列表
                for (int i = 1; i <= n; i++) {
                        list.add(i);
                }

                while (list.size() > 0) {
                        //将前连个移入列表尾端
                        for (int j = 0; j < m-1; j++) {
                                list.add(list.remove(start));
                        }
                        //打印出列的序号
                        System.out.println(list.remove(start));
                        }
                
        }
}
他打印的是出列序列。要打印最终留下的人,即需修改一下最后一句代码(通过变量接收最后一次移除的元素即可)。  但运行发现start只能给0值,取其他值报错。
                        




0 个回复

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