本帖最后由 caolufo 于 2016-8-4 16:53 编辑
最近,各种百度约瑟夫环问题解决代码,发现网络大神给的代码量最简单的一个,使用ArrayList及其add()和remove()方法完成,功能实现部分仅使用7条语句(其中4条还是声明变量和循环条件语句),分享一下。[Java] 纯文本查看 复制代码
import java.util.ArrayList;
import java.util.List;
public class Baoshu {
public static void main(String[] args) {
//50个人,从第一个人开始数,数到3的人出列
countThree(50, 0, 3);
}
/**
* 约瑟夫环:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。
* 从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,
* 数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。
*
* @param n 人的总数
* @param start 开始报数的序号,start < n
* @param m 出列的标记(可以大于n)
*/
private static void countThree(int n, int start, int m) {
List<Integer> list = new ArrayList<Integer>();
//初始化列表
for (int i = 1; i <= n; i++) {
list.add(i);
}
while (list.size() > 0) {
//将前连个移入列表尾端
for (int j = 0; j < m-1; j++) {
list.add(list.remove(start));
}
//打印出列的序号
System.out.println(list.remove(start));
}
}
}
他打印的是出列序列。要打印最终留下的人,即需修改一下最后一句代码(通过变量接收最后一次移除的元素即可)。 但运行发现start只能给0值,取其他值报错。
|