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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. import java.util.ArrayList;

  2. /*
  3. * 【程序37】   
  4. 题目:有100个人围成一圈,顺序排号。
  5. 从第一个人开始报数(从1到14报数),
  6. 凡报到14的人退出圈子,问最后留下的是原来第几号的那位。

  7. */
  8. public class Test {

  9.         public static void main(String[] args) {
  10.                 int num = getPos(100, 14);
  11.                 System.out.println(num);
  12.         }

  13.         public static int getPos(int numbers, int key) {
  14.                 // 集合接收每一个人
  15.                 ArrayList<Integer> list = new ArrayList<Integer>();
  16.                 // 编号
  17.                 for (int i = 1; i <= numbers; i++) {
  18.                         list.add(i);
  19.                 }
  20.                 // 计数器,记录报数的次数
  21.                 int count = 0;
  22.                 // 集合索引
  23.                 int index = 0;
  24.                 // 当集合长度不等于1的时候循环
  25.                 while (list.size() != 1) {
  26.                         // 计数器工作
  27.                         count++;
  28.                         // 每当遍历到队列最后一个人的时候,索引从头开始,
  29.                         // 条件为索引>集合长度-1(或索引=集合长度)
  30.                         if (index > (list.size() - 1)) {
  31.                                 index = 0;
  32.                         }
  33.                         // 每key个人退出,退出后index不动,所以退出进行下一次循环,
  34.                         if (count % key == 0) {
  35.                                 list.remove(index);
  36.                                 continue;
  37.                         }
  38.                         // 没有人退出的时候索引+1
  39.                         index++;
  40.                 }
  41.                 // 最后的人是
  42.                 return list.get(index); //此时index=0
  43.         }
  44. }
复制代码


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马