黑马程序员技术交流社区

标题: 有100个人围成一个圈,从1开始报数,报到14的这个人就要... [打印本页]

作者: 神兽    时间: 2015-7-29 23:51
标题: 有100个人围成一个圈,从1开始报数,报到14的这个人就要...
需求:有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。 然后其他人重新开始,从1报数,到14退出。
   问:最后剩下的是100人中的第几个人?
以下为代码实现:
关键代码请同学们回复后观看

// 创建集合存储100个人
ArrayList<Integer> al = new ArrayList<Integer>();
//循环赋值      
    for (int i = 1; i < 101; i++) {
                                al.add(i);
                    }
//定义一个计数变量
    int count = 0,;



作者: 最悲歌    时间: 2015-7-29 23:55
真的有这么牛???
作者: 刚刚下雨了    时间: 2015-7-29 23:57
强势围观 ^_^
作者: 天人之珠    时间: 2015-7-29 23:57
顶顶顶顶
作者: 神兽    时间: 2015-7-30 00:17
我想说关键代码我写成方法了,然后list没改过来,如果不调用方法的话需要把list改成al哦
作者: yongaidongbing    时间: 2015-7-30 00:25
大神啊哈
作者: 郁金香大公爵    时间: 2015-7-30 09:09
牛逼啊,楼主
作者: gghost2012    时间: 2015-7-30 22:05
看看楼主写的咋样
作者: 何鹏程    时间: 2015-7-31 00:20
兄弟啊。你好厉害锕
作者: T-l-H、小生    时间: 2015-7-31 00:27
围观围观
作者: c4anger    时间: 2015-7-31 00:33
看起来很赞
作者: Hider    时间: 2015-7-31 00:49
你表达的是不是有问题。。。如果顺序不变只是把第14个人抽出来的话,那第一次抽14号,然后15号往前挪第二次就抽的15号,1~13号在人数大于等于13的时候是完全不会变的,等于说只要算1~13号里面报数然后抽人就可以了?
作者: HM_七月    时间: 2015-7-31 02:00
我想说我连题目都没看懂
作者: DreamStart    时间: 2015-8-12 15:11
好尴尬还得回复
作者: kenfans    时间: 2015-8-12 20:54
看了下题,感觉思路应该是这样的:
100个对象,全部存放在ArrayList集合,定义一个count累加,加到14就把当前位置的对象移除。count清零再累加。然后定义一个index用于记录当前的下标,下标达到ArrayList.size()时就将index重置为0.

最后留下的对象就是答案
作者: 不往    时间: 2016-1-14 16:34
感觉这道理出的有歧义啊,“其他人重新开始”,其他人包不包括前13个?
作者: Lost233    时间: 2016-5-29 18:44
顶顶顶顶
作者: My_Android    时间: 2016-5-29 19:33
没看懂题目的意思。。。。
作者: ljd    时间: 2016-5-29 20:28
这个还真不会,开开眼界
作者: GAREN    时间: 2016-5-29 21:18
看看隐藏部分是啥
作者: 何亚辉    时间: 2016-5-29 22:04
package com.heima;

public class ClassTest {
        public static void main(String[] args) {
                int[] a = new int[100];
                for (int i = 0; i < a.length; i++) {
                        a[i] = i;
                }
                int original = 0;
                while (a.length >= 14) {
                        int t = 0;
                        for (int i = original; i < a.length + original; i++) {
                                if (i % 14 == 13) {
                                        a[i - original] = -1;
                                        t++;
                                }
                        }
                        original = (a.length + original) % 14;
                        int[] a1 = new int[a.length - t];
                        for (int i = 0, k = 0; i < a.length; i++) {
                                if (a[i] == -1) {
                                        continue;
                                }
                                a1[k++] = a[i];
                        }
                        a = a1;
                }

                for (int i = 0; i < a.length; i++) {
                        System.out.println(a[i] + " ");
                }

        }
}

作者: 何亚辉    时间: 2016-5-29 22:05
最后输出来的就是这个人一开始在100个人当中的序号.从 0开始;;
作者: ylw787442926    时间: 2016-5-29 22:06
一个圈...回复看答案
作者: haojingwei310    时间: 2016-5-29 22:17
看看楼主写的咋样
作者: ljd    时间: 2016-5-29 22:50
兄弟,你这段代码貌似每次都是从0报数的啊
作者: 何亚辉    时间: 2016-5-29 22:53
答案是  15
28
35
38
46
54
71
73
74
79
89
90
91

作者: 善良的死神达乐    时间: 2016-5-29 22:53
坐等风云看起时..........
作者: 何亚辉    时间: 2016-5-29 23:49
package com.heima;

import java.util.ArrayList;

public class ClassTest {
        public static void main(String[] args) {
                ArrayList c = new ArrayList();
                ArrayList c1 = new ArrayList();
                for (int i = 0; i <100; i++) {
                        c.add(i);
                }
                int original = 0;
                while (c.size() >= 14) {
                        int t = 0;
                        for (int i = original; i < c.size() + original; i++) {
                                if (i % 14 == 13) {
                                        c1.add(c.get(i - original));
                                        t++;
                                }
                        }
                        original = (c.size() + original) % 14;
                        c.removeAll(c1);
                }
        System.out.println(c);

        }
}

作者: java小白怕不    时间: 2016-5-29 23:57
小白来看大神编码.
作者: sssssssx    时间: 2016-5-30 00:02
赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞赞
作者: 漏船载酒    时间: 2016-5-30 12:48
这个其他人说的很模糊
作者: abcdefg11    时间: 2016-5-30 17:49
想看看先
作者: abcdefg11    时间: 2016-5-30 17:57
首先要看的就是重新报数是从第一个人还是去掉的那个人。。。
作者: 苏小溪    时间: 2016-12-6 11:00
我的天哪,回复还要十个字么?看看





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