黑马程序员技术交流社区
标题:
约瑟夫环
[打印本页]
作者:
wangfeng
时间:
2016-4-28 12:13
标题:
约瑟夫环
那个100人围成圈,逢四退一,可以用约瑟夫环做?
作者:
wangfeng
时间:
2016-4-28 12:19
求解啊~~~~~~~~
作者:
BackGaoz
时间:
2016-4-28 13:41
package com.heima.test;
import java.util.ArrayList;
public class Test12_约瑟夫环 {
/*
* 杀人游戏,遇4则杀
*
* 分析
* 1.用集合存储人,一共一百人 ArrayList<> list
* 2.遍历集合,判断若是4或4的倍数,就杀掉那个人
* 3.防止索引越界,每当索引等于list.size()时,把索引置为0
* 4.约瑟夫环最后剩一人
*/
public static void main(String[] args) {
System.out.println(getLuckyNum(100));
}
public static int getLuckyNum(int num) {
ArrayList<Integer> list = new ArrayList<>(); //在这里我就直接用数字代替了
for (int i = 1; i <= num; i++) {
list.add(i); //给集合中添加元素
}
int count = 1; //用来报数
for (int i = 0; list.size() > 1; i++) { //集合中大于一个人就不断的杀人
if (i == list.size()) { //如果索引已经等于list.size(),并且该集合中剩的不止一个人
i = 0; //那么,将索引置为1,就像一个圆圈一样继续数
}
if (count % 4 == 0) { //逢4就杀人
list.remove(i--); //集合中删除一个元素,后边的元素就会向前挪,防止漏掉逢4后的元素
}
count++;
}
return list.get(0); //最后集合中只剩一个,直接就可以用0索引获取.
}
}
复制代码
作者:
wangfeng
时间:
2016-4-29 08:36
谢谢了,大赞~~~
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2