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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

Prism梦幻

初级黑马

  • 黑马币:

  • 帖子:

  • 精华:

10、 有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。然后其他人重新开始,从1报数,到14退出。问:最后剩下的是100人中的第几个人?

13 个回复

倒序浏览
应该是for循环的应用!
回复 使用道具 举报
  1. package com.itheima.problem;

  2. import java.util.*;

  3. /**
  4. *需求:有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。然后其他人重新开始,从1报数,到14退出。
  5. *问:最后剩下的是100人中的第几个人?
  6. */

  7. /*
  8. * 思路:
  9. * 1、构造一个集合;
  10. * 2、创建一个嵌套方法;
  11. * 3、打印剩下的数据。
  12. */

  13. public class Test2 {
  14.         static final int KEY = 14-1;
  15.        
  16.         public static void  processData(List<Integer> li){
  17.                
  18.                 li.remove(KEY);
  19.                
  20.                 if(li.size()>=14){
  21.                         processData(li);
  22.                 }
  23.         }

  24.         public static void main(String[] args) {
  25.                 //
  26.                 List<Integer> list = new ArrayList<Integer>();
  27.                 for(int i=1;i<101;i++){
  28.                         list.add(i);
  29.                 }               
  30.                 System.out.println(list);
  31.                
  32.                 Test2.processData(list);
  33.                
  34.                 System.out.println(list);
  35.         }
  36. }
复制代码

看看符合吗?
回复 使用道具 举报
不写代码  说思路吧。
回复 使用道具 举报
看看等大神来。。。
回复 使用道具 举报
一百个人站一圈   每个人都有一个固定编号。
那么中间有个指针,每数一个人,计数器就加1
当计数器(count)等于14时 被数到的人蹲下(赋null) 以后不再计数
同时计数器归零 继续数 一直循环到 所有人都蹲下  只剩下一个人站着时 。  
他自己的编号就是咯。   
回复 使用道具 举报
还没学到集合,还看不懂
回复 使用道具 举报
好像很厉害啊
回复 使用道具 举报
想到用集合来做,但是没什么思路
回复 使用道具 举报
oup 中级黑马 2015-11-23 23:11:50
10#
class Demo1 {
        public static void main(String[] args) {
                int[] arr = new int[100];                                //定义数组,长度100.存储数1-100
                for (int i = 0; i < arr.length ;i++) {
                        arr[i] = i + 1;
                }
                int sum = 0;                                        //控制循环
                int index = 0;                                        //记录索引
                int count = 1;                                        //计数器

                while (true) {                                        //遍历数组
                       
                        if (arr[index] != 0 && count != 14) {                                //遍历的元素不为0并且计数器不为14,计数器加1,索引加1
                                count++;
                                if (index == arr.length-1) {
                                        index = 0;
                                }else {
                                        index++;
                                }
                        }else if (count == 14 && arr[index] != 0) {                        //计数器为14,元素不为0时,为该元素赋值0,剔除元素的计数器(sum)加1,并将索引加1,计数器归值1
                                arr[index] = 0;
                                sum++;                                                                       
                                count = 1;
                                if (index == arr.length-1) {
                                        index = 0;
                                }else {
                                        index++;
                                }
                        } else if (arr[index] == 0) {                //计数器为14,元素为0时,索引加1.
                                if (index == arr.length-1) {
                                        index = 0;
                                }else {
                                        index++;
                                }
                        }else if (count != 14 && arr[index] == 0) {                        //计数器不为14,元素为0,索引加1
                                if (index == arr.length-1) {
                                        index = 0;
                                }else {
                                        index++;
                                }
                        }

                        if (sum == 87) {
                                break;
                        }
                }
       
                for (int i=0; i<arr.length; i++) {
                        if (arr[i] != 0) {
                                System.out.println(arr[i]);
                        }
                }

        }
}
回复 使用道具 举报 1 0
进来看看,围观一下
回复 使用道具 举报
表示不会   {:3_60:}
回复 使用道具 举报
集合类型。for循环初始化。。然后直接remove 。超级简单。
感谢Java的集合类型。把去除这一操作使用的很简单。


另一个说的,直接做成null,也非常好的思路。

膜拜一下。
回复 使用道具 举报
我的思路是利用for循环和数组来解决,用数组的长度来控制循环
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马