`
kuaile0199
  • 浏览: 1034 次
  • 性别: Icon_minigender_1
  • 来自: 萧山
文章分类
社区版块
存档分类
最新评论

约瑟夫出圈算法

阅读更多
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)在其著作《数目的游戏问题》中提到的一个故事。该问题描述了...

    数据结构--约瑟夫环算法描述

    在该问题中,人们站成一个圈,从某个人开始计数,每数到特定数字的人会被排除出圈,然后继续从下一个人开始计数,直到只剩下最后一个人为止。这个最后剩下的人被认为是赢家。约瑟夫环算法就是解决这类问题的一种方法...

    约瑟夫算法以及算法分析.rar_算法_算法分析_约瑟夫

    约瑟夫算法就是要找出这个幸存者的位置。 算法的核心思想是模拟这个计数和排除的过程,通过递归或者循环来实现。常见的实现方式有两种:链表法和数组法。链表法更适合于理解问题的动态过程,而数组法则更便于计算。...

    约瑟夫环的算法实现

    约瑟夫环问题描述如下:假设有一群人围成一个圈,从某个人开始编号,然后按照顺时针方向依次报数,每当数到特定数值的人就会被淘汰出局,直到只剩下最后一个人为止。问题的关键在于找到这个最后幸存者的编号。 在这...

    JAVA实现约瑟夫出圈问题的解决

    Java 实现约瑟夫出圈问题,又称为约瑟夫环问题,是一个经典的计算机科学算法问题,涉及到循环链表和数组的数据结构以及递归或循环的编程思想。在这个问题中,我们假设有一群人围成一个圈,从第一个人开始顺时针报数...

    解决约瑟夫算法问题

    问题描述如下:假设有一群人站成一个圆圈,从某个人开始编号,然后按照固定的步长(例如2)报数,报到特定数字的人将被排除出圈,接着从下一个人继续报数,直到只剩下最后一个人为止。这个最后剩下的人被称为...

    约瑟夫环 算法及代码 数据结构

    约瑟夫环问题描述如下:假设有一群人围成一个圈,从某个人开始编号,然后按照一定的间隔剔除人,直到剩下最后一个人为止。例如,如果有39个人,从第1个人开始,每隔3个人剔除1人,那么最终剩下的将是第17号。这个...

    约瑟夫环算法设计报告

    【约瑟夫环算法设计】 约瑟夫环问题是一个经典的理论问题,主要涉及链表操作和循环算法的设计。在这个问题中,n个人按照顺时针方向围成一个圈,每个人都有一个唯一的编号从1到n。游戏开始时,选择一个报数上限值m,...

    约瑟夫算法(原创).rar

    约瑟夫环问题,也称为约瑟夫算法(Josephus Problem),是一个著名的理论问题,源自古罗马的一个历史故事。在该问题中,人们站成一个圈,并按照某种规则依次淘汰,直到只剩最后一个人为止。约瑟夫算法是解决这类问题...

    C++ 约瑟夫算法实现

    问题的基本设定是:一群士兵按顺时针方向围成一个圆圈,从某一位士兵开始报数,数到特定数值的士兵会被排除出圈,然后从下一位士兵继续开始数,直到只剩下最后一名士兵为止。在编程领域,约瑟夫环问题通常被用来考察...

    约瑟夫环生成算法

    约瑟夫环问题的基本形式是这样的:n个人围成一圈,从第一个人开始按顺时针方向依次报数,每报到m(m )的人会被排除,然后从下一个人继续报数,直到只剩下最后一个人为止。我们需要找出最后留下的那个人的位置或编号...

    实现约瑟夫环的C语言算法

    约瑟夫环问题,也称为约瑟夫环序列或约瑟夫问题,是一个著名的理论问题,源自古罗马的传说。该问题的基本设定是:...学习这个程序不仅有助于理解约瑟夫环问题的解决方案,还能提升对C语言链表操作和算法优化的理解。

    约瑟夫环问题的算法设计报告

    ### 约瑟夫环问题的算法设计报告 #### 问题背景及描述 约瑟夫环问题是一个经典的计算机科学问题,通常被用来测试算法设计能力。该问题涉及到一系列按照特定规则进行淘汰的游戏参与者,最终确定游戏中的胜者。具体...

    约瑟夫环问题算法描述和程序实现(C#)

    这个算法的时间复杂度为O(n),空间复杂度也为O(n),因为我们需要存储所有人的出列顺序。尽管这个问题可以使用更高效的数据结构(如链表)来解决,但在这个C#实现中,数组已经足够处理这个问题。 约瑟夫环问题的解决...

    约瑟夫环的几个经典算法

    约瑟夫环问题的基本场景是:编号为 \(1\) 至 \(n\) 的 \(n\) 个人按顺时针方向围成一圈,从编号为 \(1\) 的人开始顺时针报数。每个人报数 \(m\)(\(m\) 为正整数),报数为 \(m\) 的人出列,然后从他的下一个人开始...

    java算法 JOSEPH约瑟夫问题穷举算法解决 netbeans

    Java算法中的JOSEPH问题,也称为约瑟夫环问题,是一个经典的理论计算问题,源自古希腊的一个传说。这个问题的基本设定是,有一群人(或猴子,在此例中)围成一个圈,按照顺时针方向从某个人开始报数,数到特定数值的...

    用c语言编写约瑟夫环算法

    每次数到特定值的人会被排除出圈,然后从下一个人继续开始报数,直到只剩下最后一个人为止。这个最后幸存的人被称为“赢家”。 在C语言中实现约瑟夫环算法,我们需要理解以下几个关键点: 1. **链表数据结构**:...

Global site tag (gtag.js) - Google Analytics