黑马程序员技术交流社区

标题: 【黑马程序员】报数字游戏 [打印本页]

作者: huburt    时间: 2016-5-20 21:46
标题: 【黑马程序员】报数字游戏
  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.         }
复制代码


作者: cxl1694095035    时间: 2016-5-20 21:47
楼主给力,赞一个
作者: okchenyang44    时间: 2016-5-20 22:28
楼主给力,赞一个
作者: sasyun    时间: 2016-5-20 22:29
赞一个

作者: Deleba    时间: 2016-5-20 22:39
楼主给力,赞一个!




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