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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wangfeng 中级黑马   /  2016-4-28 12:13  /  567 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

那个100人围成圈,逢四退一,可以用约瑟夫环做?

3 个回复

倒序浏览
求解啊~~~~~~~~
回复 使用道具 举报
  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. }
复制代码
回复 使用道具 举报
谢谢了,大赞~~~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马