黑马程序员技术交流社区

标题: 百人围圈数数 [打印本页]

作者: rnyrnyrny    时间: 2014-12-29 23:41
标题: 百人围圈数数
有100个人围成一个圈,从1开始报数,报到14的这个人就要退出然后其他人重新开始,从1报数,到14退出问:最后剩下的是100人中的第几个人?

import java.util.*;

class CountTest {

   public static void main(String[] args) {
      int index = count(100, 14);
      System.out.println("最后剩下的人编号是:" + index);
   }

   //定义一个函数,传入围成圈的人数,以及每报到多少的人就要退出,返回最后剩下的人的编号
   public static int count(int sum, int check) {
      //使用ArrayList存入数字1到100来代表每个人的编号
      List<Integer> l = new ArrayList<Integer>();
      for (int i = 1; i <= sum; i++) {
         l.add(i);
      }
      //获取ArrayList的迭代器
      ListIterator<Integer> li = l.listIterator();
      int count = 0; //定义计数器
      //循环条件:圈中的人数大于1
      //每循环一次,计数器加一,使用next()方法使指针指向下一个数
      //当指针指向的是列表的最后一个元素时,重新获取迭代器,使指针回到列表开头
      //如果计数器到达14就把迭代器指向的元素删除
      while (l.size() > 1) {
         count++;
         if(li.hasNext()) {
            li.next();
         } else {
            li = l.listIterator();
            li.next();
         }
         if (count == check) {
            li.remove();
            count = 0;
         }
      }
      //最后返回列表中剩下的最后一个元素
      return l.get(0);
   }
   
}


作者: jian叫兽    时间: 2014-12-30 01:25
学习,慢慢研究。




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