public class Josephus {
private int total;
private int num;
private int[] array;
public Josephus(int total, int num) {
this.total = total;
this.num = num;
array = new int[total];
for (int i = 0; i < total; i++) {
array[i] = i + 1;
}
}
public static void main(String[] args) {
Josephus josephus = new Josephus(20, 3);
josephus.josephus();
}
public void josephus() {
int i, j;
if (this.getTotal() <= 0 || this.getNum() <= 0) //处理参数值不正确的情况
{
System.out.println("Paramter must bigger than zero!");
return;
}
int k = 1; //标识处理第k个离开的人
i = -1; //数组下标,下一个为0,即第一个人
while (true) //k等于n表示只剩下一个人了
{
for (j = 0; j < this.getNum();) //在圈中数m个人
{
i = (i + 1) % this.getTotal();
if (this.getArray()[i] > 0) {
j++; //a[i] >0表示第i个人还没有离开
}
}
if (k == this.getTotal()) {
break;
}
System.out.println("No." + this.getArray()[i] + " is out!");
this.getArray()[i] = -1; //表示该人离开
k++;
}
System.out.println("No." + this.getArray()[i] + " is the winner!");
}
public int getTotal() {
return total;
}
public void setTotal(int total) {
this.total = total;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public int[] getArray() {
return array;
}
public void setArray(int[] array) {
this.array = array;
}
}
分享到:
相关推荐
约瑟夫出圈问题,又称为约瑟夫环问题,是一个经典的理论计算机科学问题,源自古罗马的一个传说。在这个问题中,人们围成一个圈,按照一定的规则进行报数,报到特定数值的人会被淘汰,然后剩下的人继续报数,直到只...
该问题的基本设定是:一群囚犯围成一个圈,按照顺时针方向从某个人开始计数,每数到特定数值的人会被剔除出圈,然后从下一个人继续计数,直到只剩下最后一个人为止。这个最后剩下的人将获得自由。在编程领域,约瑟夫...
### 约瑟夫出圈问题详解 #### 一、问题背景与定义 约瑟夫问题(Josephus Problem)源自17世纪法国数学家加斯帕尔·德·罗贝瓦尔(Gaspard de Roberval)在其著作《数目的游戏问题》中提到的一个故事。该问题描述了...
在该问题中,人们站成一个圈,从某个人开始计数,每数到特定数字的人会被排除出圈,然后继续从下一个人开始计数,直到只剩下最后一个人为止。这个最后剩下的人被认为是赢家。约瑟夫环算法就是解决这类问题的一种方法...
约瑟夫算法就是要找出这个幸存者的位置。 算法的核心思想是模拟这个计数和排除的过程,通过递归或者循环来实现。常见的实现方式有两种:链表法和数组法。链表法更适合于理解问题的动态过程,而数组法则更便于计算。...
约瑟夫环问题描述如下:假设有一群人围成一个圈,从某个人开始编号,然后按照顺时针方向依次报数,每当数到特定数值的人就会被淘汰出局,直到只剩下最后一个人为止。问题的关键在于找到这个最后幸存者的编号。 在这...
Java 实现约瑟夫出圈问题,又称为约瑟夫环问题,是一个经典的计算机科学算法问题,涉及到循环链表和数组的数据结构以及递归或循环的编程思想。在这个问题中,我们假设有一群人围成一个圈,从第一个人开始顺时针报数...
问题描述如下:假设有一群人站成一个圆圈,从某个人开始编号,然后按照固定的步长(例如2)报数,报到特定数字的人将被排除出圈,接着从下一个人继续报数,直到只剩下最后一个人为止。这个最后剩下的人被称为...
约瑟夫环问题描述如下:假设有一群人围成一个圈,从某个人开始编号,然后按照一定的间隔剔除人,直到剩下最后一个人为止。例如,如果有39个人,从第1个人开始,每隔3个人剔除1人,那么最终剩下的将是第17号。这个...
【约瑟夫环算法设计】 约瑟夫环问题是一个经典的理论问题,主要涉及链表操作和循环算法的设计。在这个问题中,n个人按照顺时针方向围成一个圈,每个人都有一个唯一的编号从1到n。游戏开始时,选择一个报数上限值m,...
约瑟夫环问题,也称为约瑟夫算法(Josephus Problem),是一个著名的理论问题,源自古罗马的一个历史故事。在该问题中,人们站成一个圈,并按照某种规则依次淘汰,直到只剩最后一个人为止。约瑟夫算法是解决这类问题...
问题的基本设定是:一群士兵按顺时针方向围成一个圆圈,从某一位士兵开始报数,数到特定数值的士兵会被排除出圈,然后从下一位士兵继续开始数,直到只剩下最后一名士兵为止。在编程领域,约瑟夫环问题通常被用来考察...
约瑟夫环问题的基本形式是这样的:n个人围成一圈,从第一个人开始按顺时针方向依次报数,每报到m(m )的人会被排除,然后从下一个人继续报数,直到只剩下最后一个人为止。我们需要找出最后留下的那个人的位置或编号...
约瑟夫环问题,也称为约瑟夫环序列或约瑟夫问题,是一个著名的理论问题,源自古罗马的传说。该问题的基本设定是:...学习这个程序不仅有助于理解约瑟夫环问题的解决方案,还能提升对C语言链表操作和算法优化的理解。
### 约瑟夫环问题的算法设计报告 #### 问题背景及描述 约瑟夫环问题是一个经典的计算机科学问题,通常被用来测试算法设计能力。该问题涉及到一系列按照特定规则进行淘汰的游戏参与者,最终确定游戏中的胜者。具体...
这个算法的时间复杂度为O(n),空间复杂度也为O(n),因为我们需要存储所有人的出列顺序。尽管这个问题可以使用更高效的数据结构(如链表)来解决,但在这个C#实现中,数组已经足够处理这个问题。 约瑟夫环问题的解决...
约瑟夫环问题的基本场景是:编号为 \(1\) 至 \(n\) 的 \(n\) 个人按顺时针方向围成一圈,从编号为 \(1\) 的人开始顺时针报数。每个人报数 \(m\)(\(m\) 为正整数),报数为 \(m\) 的人出列,然后从他的下一个人开始...
Java算法中的JOSEPH问题,也称为约瑟夫环问题,是一个经典的理论计算问题,源自古希腊的一个传说。这个问题的基本设定是,有一群人(或猴子,在此例中)围成一个圈,按照顺时针方向从某个人开始报数,数到特定数值的...
每次数到特定值的人会被排除出圈,然后从下一个人继续开始报数,直到只剩下最后一个人为止。这个最后幸存的人被称为“赢家”。 在C语言中实现约瑟夫环算法,我们需要理解以下几个关键点: 1. **链表数据结构**:...