黑马程序员技术交流社区

标题: 约瑟夫环 [打印本页]

作者: wangfeng    时间: 2016-4-28 12:13
标题: 约瑟夫环
那个100人围成圈,逢四退一,可以用约瑟夫环做?
作者: wangfeng    时间: 2016-4-28 12:19
求解啊~~~~~~~~
作者: BackGaoz    时间: 2016-4-28 13:41
  1. package com.heima.test;

  2. import java.util.ArrayList;

  3. public class Test12_约瑟夫环 {
  4.         /*
  5.          * 杀人游戏,遇4则杀
  6.          *
  7.          * 分析
  8.          * 1.用集合存储人,一共一百人        ArrayList<> list
  9.          * 2.遍历集合,判断若是4或4的倍数,就杀掉那个人
  10.          * 3.防止索引越界,每当索引等于list.size()时,把索引置为0
  11.          * 4.约瑟夫环最后剩一人
  12.          */
  13.         public static void main(String[] args) {
  14.                 System.out.println(getLuckyNum(100));
  15.         }

  16.         public static int getLuckyNum(int num) {
  17.                 ArrayList<Integer> list = new ArrayList<>();                                        //在这里我就直接用数字代替了
  18.                 for (int i = 1; i <= num; i++) {
  19.                         list.add(i);                                                                                                                        //给集合中添加元素
  20.                 }
  21.                 int count = 1;                                                                                                                //用来报数
  22.                 for (int i = 0; list.size() > 1; i++) {                                                                //集合中大于一个人就不断的杀人
  23.                         if (i == list.size()) {                                                                                                //如果索引已经等于list.size(),并且该集合中剩的不止一个人
  24.                                 i = 0;                                                                                                                        //那么,将索引置为1,就像一个圆圈一样继续数
  25.                         }
  26.                         if (count % 4 == 0) {                                                                                        //逢4就杀人
  27.                                 list.remove(i--);                                                                                                //集合中删除一个元素,后边的元素就会向前挪,防止漏掉逢4后的元素
  28.                         }
  29.                         count++;
  30.                 }
  31.                 return list.get(0);                                                                                                        //最后集合中只剩一个,直接就可以用0索引获取.
  32.         }

  33. }
复制代码

作者: wangfeng    时间: 2016-4-29 08:36
谢谢了,大赞~~~





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