- public static void main(String[] args) {
- System.out.println("最后留下的是第" + play(100, 14) + "人。");
- }
- /**
- * @param peoples
- * 玩游戏的人数
- * @param number
- * 报的数字
- * @return 最后留下一个人的序号
- */
- public static Integer play(int peoples, int number) {
- // 创建集合,赋值1~number的数字,代表玩游戏的人的序号
- ArrayList<Integer> list = new ArrayList<Integer>();
- for (int i = 1; i <= peoples; i++) {
- list.add(i);
- }
- // 指针,代表报数的人的位置
- int pointer = 0;
- // 报数的数字
- int count = 1;
- // 游戏结束点:最后留下一个人
- while (list.size() > 1) {
- // 指针超过集合长度,表示完成1轮报数,第一个人继续报数
- if (pointer == list.size()) {
- // 指针回到第一个人
- pointer = 0;
- }
- // 报数14,
- if (count % number == 0) {
- // 查看每一个报到指定数字的人
- // System.out.println("退出的是第" + list.get(pointer) + "人");
- // 报到指定数字的人退出游戏
- list.remove(pointer);
- // 有人退出,集合长度就会减少,原本退出位置的后一位向前移,因此还是从退出位置开始报数
- // pointer++;//不需要!
- // 重新从1开始报数
- count = 1;
- } else {
-
- // 没有报到14的,指针往后移动
- pointer++;
-
- // 报数加1
- count++;
- }
- }
- //返回最后剩下的人的序号
- return list.get(0);
- }
复制代码 |
|