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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 HARRY_yFd0S 于 2016-9-8 23:21 编辑

题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号。
各位大神可以挑战一下。

评分

参与人数 1黑马币 +4 收起 理由
houseofthrones + 4 很给力!

查看全部评分

13 个回复

倒序浏览
很感兴趣  求大神解答一下 啊
回复 使用道具 举报
HARRY_yFd0S 来自手机 中级黑马 2016-9-8 22:24:46
藤椅
20行代码做出来了,好开心
回复 使用道具 举报
贴出我的代码,验证过几组数据,都是ok的
        public static void main(String[] args) {
                ArrayList<Integer> al = new ArrayList<Integer>();
                Scanner scanner = new Scanner(System.in);
                System.out.println("请输入人数:");               
                int n = scanner.nextInt();               
                for (int i = 1; i <= n; i++) {
                        al.add(i);
                }               
                int i = 0;               
                while(al.size() > 1) {
                        i += 2;
                        while(i > al.size() - 1) {
                                i = i - al.size();
                        }       
                        al.remove(i);       
                }               
                System.out.println("最后一个人的编号是:"+al.get(0));
        }

点评

超赞  发表于 2016-9-10 01:16
回复 使用道具 举报 2 0
好难,这是谁出的题
回复 使用道具 举报
HARRY_yFd0S 发表于 2016-9-8 22:41
贴出我的代码,验证过几组数据,都是ok的
        public static void main(String[] args) {
                ArrayList al = ne ...

很厉害,看了好一会算法才看明白,膜拜
回复 使用道具 举报
private static int getNum(int i) {
                //创建集合,存储人数
                ArrayList<Integer> list = new ArrayList<Integer>();
                //遍历,把每个人的代号添加到数组中
                for (int j = 1;  list.size()<i ; j++) {
                        list.add(j);
                }
                int count = 1;
                for (int j = 0; list.size()!=1; j++) {
                        //如果索引是最后一个加一,那么让索引归零
                        if(j == list.size()){
                                j = 0;
                        }
                        if(count %3 ==0){
                                //没数到三个删除一次
                                list.remove(j--);
                        }
                        count ++;
                }
                return list.get(0);
        }
回复 使用道具 举报 2 0
岳阳天 发表于 2016-9-8 23:14
private static int getNum(int i) {
                //创建集合,存储人数
                ArrayList list = new ArrayList();

大神真厉害!
回复 使用道具 举报
这题不难啊
回复 使用道具 举报
我操  牛逼,搞了半天没搞出来 睡觉
回复 使用道具 举报
说下思路吧,存到list集合中,然后计算报数,使用迭代,并且迭代的过程中计数,计数到3,将刚迭代的元素移出集合,计数器归零,继续从下一个迭代,并且重复上述步骤,注意迭代的过程是循环不断的,只有满足只有一个元素时,才结束迭代,跳出循环
回复 使用道具 举报
顶顶顶~~
回复 使用道具 举报
这道题好难
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马