黑马程序员技术交流社区

标题: 100人报数报到14退出问题 [打印本页]

作者: OnlyStyle    时间: 2014-11-14 21:37
标题: 100人报数报到14退出问题
  虽然目前已经面试结束,但是闲着还是会写写代码,上上论坛,偶然间发现论坛有人问这样一个问题:
有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。
然后其他人重新开始,从1报数,到14退出。问:最后剩下的是100人中的第几个人?
开始自己想办法笔算,最后还是不行,便写了一段Java代码来解决,最后得到结果为92,不知道对不对,感兴趣的可以看下,代码如下:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;

public class Test7 {
        private static List<Integer> list=new ArrayList<Integer>();                                                            
        public static void main(String[] args) throws Exception{
                System.out.println(run(list));
                /*Iterator<Integer> it=list.iterator();
                while (it.hasNext()) {
                        Integer i =  it.next();
                        System.out.println(i);
                       
                }*/
        }
        public static Integer run(List<Integer> list){
                int count=0;//计数器,用于记录报数
                for (int i = 1; i <101 ; i++) {
                        //报数之前,应先判断此编号的人是否有报数资格,即容器是否包含之
                        if (!list.contains(i)) {
                                count++;//报数
                                //每报到14的整数倍,清除此编号人员的报数资格,即加入容器
                                if (count%14==0) {
                                        //System.out.println(count);
                                        list.add(i);
                                }
                        }
                        //返回最后一个报数的人
                        if ((list.size()==99)&&(count%14==1)) {
                                //System.out.println(i);
                                return i;
                        }
                        //当到末尾时,设置循环控制到开头,形成“圈”。
                        if (i==100) {
                                i=0;
                        }
                }
                return null;
        }
       
       
}




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