题目:
引用
据说著名犹太历史学家 约瑟夫有过以下的故事:
在罗马人占领乔塔帕特后,39 个犹太人与约瑟夫及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而约瑟夫 和他的朋友并不想遵从,约瑟夫要他的朋友先假装遵从,他将朋友与自己安排在第16个与第31个位置,于是逃过了这场死亡游戏。
我的答案:
package test;
import java.util.ArrayList;;
public class CircleTest {
int m; //总人数
int n; //第几个出局
ArrayList<String> circle = new ArrayList <String>();
public CircleTest(int m, int n) {
this.m = m;
this.n =n;
//初始化环
for (int i = 1; i <= m; i++) {
circle.add(String.valueOf(i));
}
print(circle);
}
public void doAction() {
ArrayList<String> temp = null;
int k = n;//计数
while (true) {
temp = (ArrayList<String>)circle.clone();
if (temp.size() == 1) {
System.out.println(temp.get(0)+"\n");//最后一个出局的人
break;
}
for (int i =0; i < temp.size(); i++) { //循环
k--;
if (k == 0) {
System.out.print(temp.get(i)+" ");//打印出局的人
circle.remove(temp.get(i)); //出局
k = n; //重新开始计数
}
}
}
}
//打印
public void print(ArrayList<String> list){
for(int i=0;i<list.size();i++){
System.out.print(list.get(i)+" ");
}
System.out.print("\n\n");
}
public static void main(String args[]) {
CircleTest test = new CircleTest(41,3);
test.doAction();
}
}
分享到:
相关推荐
约瑟夫环java实现
约瑟夫环问题Java代码实现 详细介绍了约瑟夫环问题 以及java的代码实现
循环链表 实现约瑟夫环 java 自己写的 测试通过 有注释
用JAVA实现约瑟夫环
使用JAVA实现约瑟夫环,可以输入任意一组数字
java用数组实现的约瑟夫环问题。代码简单易懂。
java实现约瑟夫环问题Josephus 约瑟夫问题 * 已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k(1,2,3...n)的人开始报数,数到m(1,2,3...)的那个人出列; * 他的下一个人又从1开始报数,...
约瑟夫环是一个数学的应用问题: 已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,...
这是一个java的约瑟夫问题代码,实现约瑟夫问题(循环链表)!
java实现约瑟夫环,java初学者的一个小程序,java实现
用java来实现约瑟夫环,其中的一些算法和思想都是比较经典的,可以仔细品味一下
Java约瑟夫环演示Applet源码,程序组成: MainApplet类:主要实现了界面的显示 MainSrc类:主要实现了界面图形变化的控制 ParaDialog类:实现了测试参数的输入
通过java顺序表实现约瑟夫环的两种方式: 1.通过数组移动 2.通过记录出对列的人员下标,下次查数时跳过
通过简单的程序解决约瑟夫环问题 c++文件
约瑟夫环的JAVA实现以及对应的代码讲解.pdf
用循环队列解决约瑟夫环问题减少用顺序表在出对是循环移动带来的空间复杂度
这个使用单链表实现的,里面还有寻找单链表环的入口的问题
约瑟夫环,用循环链表实现,语言为Java。假设数到三的数出列。程序输出1到10的出列顺序。
用数据结构实现约瑟夫环,是一次数据结构大作业