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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© huburt 中级黑马   /  2016-5-20 21:46  /  362 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. ------<a  target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
复制代码
  1. public static void main(String[] args) {

  2.                 System.out.println("最后留下的是第" + play(100, 14) + "人。");

  3.         }

  4.         /**
  5.          * @param peoples
  6.          *            玩游戏的人数
  7.          * @param number
  8.          *            报的数字
  9.          * @return 最后留下一个人的序号
  10.          */
  11.         public static Integer play(int peoples, int number) {
  12.                 // 创建集合,赋值1~number的数字,代表玩游戏的人的序号
  13.                 ArrayList<Integer> list = new ArrayList<Integer>();
  14.                 for (int i = 1; i <= peoples; i++) {
  15.                         list.add(i);
  16.                 }
  17.                 // 指针,代表报数的人的位置
  18.                 int pointer = 0;
  19.                 // 报数的数字
  20.                 int count = 1;
  21.                 // 游戏结束点:最后留下一个人
  22.                 while (list.size() > 1) {
  23.                         // 指针超过集合长度,表示完成1轮报数,第一个人继续报数
  24.                         if (pointer == list.size()) {
  25.                                 // 指针回到第一个人
  26.                                 pointer = 0;
  27.                         }
  28.                         // 报数14,
  29.                         if (count % number == 0) {
  30.                                 // 查看每一个报到指定数字的人
  31.                                 // System.out.println("退出的是第" + list.get(pointer) + "人");

  32.                                 // 报到指定数字的人退出游戏
  33.                                 list.remove(pointer);

  34.                                 // 有人退出,集合长度就会减少,原本退出位置的后一位向前移,因此还是从退出位置开始报数
  35.                                 // pointer++;//不需要!

  36.                                 // 重新从1开始报数
  37.                                 count = 1;
  38.                         } else {
  39.                                
  40.                                 // 没有报到14的,指针往后移动
  41.                                 pointer++;
  42.                                
  43.                                 // 报数加1
  44.                                 count++;
  45.                         }
  46.                 }
  47.                 //返回最后剩下的人的序号
  48.                 return list.get(0);
  49.         }
复制代码

4 个回复

倒序浏览
楼主给力,赞一个
回复 使用道具 举报
楼主给力,赞一个
回复 使用道具 举报
赞一个
回复 使用道具 举报
楼主给力,赞一个!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马