黑马程序员技术交流社区

标题: 分享入学测试----有100个人围成一个圈,从1开始报数。。。 [打印本页]

作者: fluency    时间: 2015-1-19 16:49
标题: 分享入学测试----有100个人围成一个圈,从1开始报数。。。
  1. package com.itheima;

  2. import java.util.LinkedList;

  3. /**
  4. * @author Mr 10、
  5. *         有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。然后其他人重新开始,从1报数,到14退出。问:最后剩下的是100人中的第几个人?
  6. */
  7. public class Test10 {
  8.         public static void main(String[] args) {
  9.                 // 因为频繁删除所以用LinkedList
  10.                 LinkedList<Integer> nums = new LinkedList<Integer>();
  11.                 for (int i = 1; i <= 100; i++) {
  12.                         nums.add(i);
  13.                 }

  14.                 System.out.println(nums);
  15.                
  16.                 int flag = 0;
  17.                 loop: while (true) {// 将普通队列模拟成循环队列结构,并定义跳出点,开始遍历循环队列
  18.                         for (int i = 0; i < nums.size(); i++) {
  19.                                 Integer num = nums.get(i);
  20.                                 if (++flag == 14) {// 如果是计数第14个 删除该元素
  21.                                         nums.remove(num);
  22.                                         i--;// 元素减少一个 ,循环指针跟着动
  23.                                         System.out.println("删除:" + num);
  24.                                         System.out.println("剩余:" + nums);
  25.                                         flag = 0;// 计数归零
  26.                                         if (nums.size() == 1)
  27.                                                 break loop;
  28.                                 }
  29.                         }
  30.                 }

  31.         }
  32. }
复制代码

作者: fluency    时间: 2015-1-24 15:20
感谢加分
作者: 丶北京青年    时间: 2015-1-24 23:03
谢谢分享{:2_32:}
作者: SanYong    时间: 2015-1-26 09:19
谢谢分享
作者: Strong    时间: 2015-1-26 11:04
楼主面试没有?
作者: 以利亚    时间: 2015-1-30 10:14
感谢分享
作者: 18942668193    时间: 2015-1-30 18:53
感谢分享
作者: 提米特    时间: 2015-2-17 10:13
你的程序我运行了一下,结果是错误的。
问题在于你理解题目有问题,题目中说,如果遇到14就将这个人移除,然后其他人重新开始

所以先不管程序,退出的人应该是14,15,16,17……100,即从14号开始退出,然后重新开始数则原来的15号变成了14号,依次类推,所以首先是14号到100号逐一退出。

希望楼主再接再厉!

作者: 彭春晓    时间: 2015-3-20 22:26
感谢分享,又学到了新东西,。谢谢
作者: wkz_crystal    时间: 2015-3-21 18:42
这个题目有意思……这种循环思想挺牛了,主要是控制好指针flag,就好理解了……




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