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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Fangjie 中级黑马   /  2016-6-11 12:32  /  335 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

这是我写的,希望与大家交流下,还有更简单的吗?
//定义变量X,来记录最后100人中剩下人的编号
        static int x =0;
       
        //主函数
        public static void main(String[] args){
               
                //创建两个ArrayList集合al和newAl,al用来存最开始这100个人的数据,newAl用来存100人中报到14要退出的人数
                ArrayList<Integer> al = new ArrayList<Integer>();
                ArrayList<Integer> newAl = new ArrayList<Integer>();
               
                //1-100的循环,给al这个集合添加1到100个人的数据
                for(int i=1 ;i<101;  i++){
                        al.add(i);
                }
               
                //调用能记录满足报到14,就要退出人的编号的方法
                newAl = remianPerson();
               
                //移除那些满足条件需要退出的人后就是剩下的人
                al.removeAll(newAl);
               
                //通过获取al集合的迭代器,来打印剩余人的编号数据
                Iterator<Integer> it = al.iterator();
                while(it.hasNext()){
                        //给剩余人的编号做个序号
                        x++;
                        System.out.println("剩余第"+x+"人的编号是:"+it.next());
                }
        }

        //定义方法来获取满足100人中循环报到14要退出的最终人的编号
        private static ArrayList<Integer> remianPerson() {
               
                //定义集合来保存满足报到14要退出的人的编号
                ArrayList<Integer> rp = new ArrayList<Integer>();
               
                //定义变量count用来记录报数
                int count = 0;
               
                //从1-100人之间的循环报数
                for(int i=1 ; i<101 ; i++){
                        count++;
                       
                        //当集合里记录退出的人编号重复出现时,则忽略当前编号进入下个编号
                        while(rp.contains(i)){
                                i++;
                               
                                //当集合里编号为100的人重复出现时,i会变成101结束,为了让程序能继续循环运行,把i赋值为1在开始
                                if(i==101)
                                        i=1;
                        }
                       
                        //如果报数能余14等于0,说明已经报到14,则集合记录此人编号,在把报数清零,重新记录报数情况
                        if(count%14==0){
                                rp.add(i);
                                count=0;
                        }
                       
                        //当for循环走到i等于100时,程序下一步会结束,为了让程序继续走把i赋值为1
                        if(i==100)
                                i=1;
                        //只有当集合中报到14满足条件的人数大于86时,也就是不满足条件剩下的人数小于14,
                        //不能完成报数条件时才会结束,返回100人中报到14满足条件的所有人编号
                        if(rp.size()>86)
                                return rp;                       
                }
                //返回结合数据
                return rp;
        }

0 个回复

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