黑马程序员技术交流社区

标题: 会就是大神? [打印本页]

作者: 刘文秀    时间: 2016-8-2 22:11
标题: 会就是大神?
10、有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。然后其他人重新开始,从1报数,到14退出。问:最后剩下的是100人中的第几个人

作者: qetu001212    时间: 2016-8-2 23:27
import java.util.ArrayList;
public class Test {
        public static void main(String[] args) {
                ArrayList<Integer> al = new ArrayList<>();
                for(int i = 1;i <= 100;i++){
                        al.add(i);
                }
                int count = 0;
                for(int i = 0;i < al.size();i++){
                        if(al.size() >= 14){
                                al.remove(13);
                                i = 0;
                        }else{
                               
                                if(14%al.size() == 0){
                                        al.remove(al.size()-1);
                                        i = 0;
                                }else{
                                al.remove(14%al.size()-1);
                                i = 0;
                                }
                        }
                        if(al.size()==1){
                                break;
                        }
                        System.out.println(al);
                }
                System.out.println(al);
               
        }
}
快死了,求大神来个更简单的。。。
作者: caolufo    时间: 2016-8-3 00:33
本帖最后由 caolufo 于 2016-8-3 14:41 编辑

留下的是第92人。
参照课程day1给的50道题库有类似的题:是报数为3的人出列。有些不好理解。
作者: caolufo    时间: 2016-8-3 14:46
n人报数,报到m的人推出:
[Java] 纯文本查看 复制代码
public class Test9 {

        public static void main(String[] args) {
                baoshu(100,14);
        }

        public static void baoshu(int n, int m) {
                //定义数组变量标识某人是否还在圈内,初始值为true
                boolean[] flags=new boolean[n];
                for (int j = 0; j < flags.length; j++) {
                        flags[j]=true;
                }
                int countNum=0;//定义报的数
                int index=0;   //定义索引
                int inCount=n; //定义在圈内的人数
                while(inCount>1){
                        if(flags[index]){
                                countNum++;
                           if (countNum==m) {
                                   flags[index]=false;
                                   inCount--;
                                   countNum=0;
                           }   
                        }
                        index++;
                        if (index==n)
                                index=0;
                }
               
               
                for (int i = 0; i < flags.length; i++) {
                        if (flags) {
                                System.out.println("留下的是第"+(i+1)+"个人");
                        }       
                }
               
        }

}







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