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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© rnyrnyrny 中级黑马   /  2014-12-29 23:41  /  1304 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

有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);
   }
   
}

评分

参与人数 1黑马币 +2 收起 理由
杨佳名 + 2

查看全部评分

1 个回复

正序浏览
学习,慢慢研究。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马