Java实现约瑟夫环:50个人围成一圈数数,数到3的人退出,求最后剩下的人的编号
2015-01-19 15:56
627 查看
public class Main {
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));
}
}
}
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));
}
}
}
相关文章推荐
- 约瑟夫环,100个人围成圈圈,逢3退出,求最后剩下的人的编号(分别用数组和双向循环链表实现)
- 50个人围成一圈数数,数到3的人退出,求最后剩下的人的编号
- 约瑟夫环问题:有n个人围成一圈,顺序编号。从第1个人开始报数(从1-m报数),凡报到m的人退出圈子,问最后留下的是原来第几号的那位?
- 50个人围成一圈报数,遇到3的倍数,自动退出,最后剩下的人原来的位置是多少
- java 有n个人围成一圈,从第1个人开始,1、2、3报数,报至3出局,余下的人继续从1、2、3报数,问:最后剩下的一人是原来的第几号?同时求出被淘汰编号的序列
- 【算法】n个人围成一圈报数,报到3的退出,下面接着从1开始报,问最后剩下的是谁?
- 【转】约瑟夫环算法---------题目:有n个人围成一圈,顺序排号,从第一个开始报数(从1到3报数),凡报到3的人退出圈子,问最后最后留下的是原来第几号的那位.
- 【约瑟夫环】Java实现:100个人开始从1开始报数,每当报数到3,报数3的人离开,求最后留下来人的位置。
- C语言用数组1. 简单约瑟夫环问题: N个人,编号从1~N围成一圈,输入一个数T,从1号开始报数,报到T的人出圈;下一人又从1开始报数,下一个报到T的人出圈,输出出圈顺序。 考虑问实现约瑟夫环问题
- 【约瑟夫环】Java实现:100个人开始从1开始报数,每当报数到3,报数3的人离开,求最后留下来人的位置。
- java编程题:50个人围成一圈数到3和3的倍数时出圈,问剩下的人是谁,在原来的位置是多少?
- java算法50个人围成一圈数到三和三的倍数时出圈,问剩下的人是谁?在原来的位置是多少?
- Java解决有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位
- java 有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
- Java 写有n个人围成一圈,顺序排号,从第一个人开始报数(从1~3报数), 凡报到3的人退出圈子,问最后留下的人原来排在第几号。
- n 个人围成一圈(编号1-n),数到3的出列,最后剩下的人的编号
- python 实现:题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
- n个人围成一圈,从第1个人开始数数,数到3的人出圈,输出最后剩余的人编号(约瑟夫环问题)
- n个人围成一圈报数,从1报到3,报到3的人退出,然后依次循环,直到剩下最后一人,这人是第几个人?
- Java有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下 的是原来第几号的那位。