约瑟夫问题解决方案

约瑟夫环问题(java,利用数组解决 约瑟夫环问题(java,利用数组解决) 也是最近开始学java,碰到有意思的问题就自己写一写来这里做个交流,也相当于是一种记录吧,请各位大牛批评指正 public static void main(String[] args) { System.out.println("请输入人数:"); Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int a[] = new int[n 阅读详情
/**
 * 作者:永锋
 * 功能:约瑟夫问题
 */

package demo4;

public class Yuesefu {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Cyclink c = new Cyclink();
		c.setLen(36);
		c.CreatLink();
		c.ShowLink();
		c.setK(5);
		c.setM(3);
		c.play();
	}

}



class Child 
{
	int num;
	Child netxtChile = null;
	
	public Child(int num)
	{
		this.num = num;
	}
}

//环形链表

class Cyclink
{
	//指向第一个小孩的引用,不能动
	Child firstChild = null;
	Child temp = null;
	int len = 0; //表示共有多少个小孩
	int k = 0; //表示从第几个开始数
	int m = 0; //表示从第K个开始数,数到第M个
	
	
	public void setLen(int len)
	{
		this.len = len;
	}
	
	public void setK(int k)
	{
		this.k = k;
	}
	
	public void setM(int m)
	{
		this.m = m;
	}
	
	//初始化环形链表
	
	public void CreatLink()
	{		for(int i = 1; i<=len; i++)
		{
			
			Child ch = new Child(i);
			if(i == 1){
				//创建第一个小孩
				this.firstChild = ch;
				this.temp = this.firstChild;
			}else if(i == len){
				this.temp.netxtChile = ch;
				this.temp = ch;
				this.temp.netxtChile = this.firstChild;	
			}else{
					this.temp.netxtChile = ch;
					this.temp = ch;
			}
		}
	}
	
	public void play()
	{
		//find the k child to start paly
		Child curChild = this.firstChild;
		Child preChild = this.firstChild;
		Child tmp = null;
		//find the preChild 
		
		do{
			preChild = preChild.netxtChile;						
		}while(preChild.netxtChile != curChild);
		
		do{
			for(int i=1; i<this.k; i++)
			{
				preChild = curChild;
				curChild = curChild.netxtChile;
			}
			
			//find the m child from the k child
			for(int j=1; j<this.m; j++)
			{
				preChild = curChild;
				curChild = curChild.netxtChile;
			}
			
			
			//del the m child
			preChild.netxtChile = curChild.netxtChile;
			curChild = curChild.netxtChile;
			this.len--;
			tmp = curChild;
			do{
				System.out.print(tmp.num + " ");	
				tmp = tmp.netxtChile;
			}while(tmp != curChild);
			System.out.println("最后出圈:" + curChild.num);
		}while(this.len != 1);
		System.out.println("最后出圈:" + curChild.num);
	}

	public void ShowLink()
	{
		Child temp = this.firstChild;
		do{
			System.out.print(temp.num + " ");	
			temp = temp.netxtChile;
		}while(temp != this.firstChild);
		System.out.println(" ");
	}
}

C++实现约瑟夫问题解决方案 约瑟夫问题,又被称为约瑟夫环或约瑟夫斯问题,是一个著名的数学问题,来源于一个描述约瑟夫·路斯(Josephus Flavius)和犹太人之间的战争故事。在这个问题中,一组士兵围成一圈,并按照顺时针或逆时针方向报数,数到某个数字的士兵将被排除出圈子,然后从下一个人开始继续报数,直到所有人都被排除。如何有效地模拟这个过程并找出最后剩下的人的位置,是解决该问题的关键。约瑟夫问题不仅具有深刻的历史背景,它还广泛应用于计算机科学和数学领域,尤其是在数据结构的链表操作、递归算法设计以及问题的逻辑构建等方面。 阅读详情

相关推荐

Java约瑟夫问题

/** * Java约瑟夫问题: n个人(不同id)围成一个圈,从startId(任意数)个开始报数m(任意数)个数,数m的人出列排成新队列,m清零, * 然后又从下一个人开始数m个数开始,数到m就出列接在新队列尾部,如此重复,知道所有人都出列为止。 * 打印 出列后的新队列 * * eg * int n = 10;//总人数 int m = 3; //报数个数 int startIndex = 1; //起点位置 * @author Hulk 2014 03 20 * */

如何简单解决约瑟夫环问题?

使用单链表轻松解决约瑟夫环问题,详细步骤分析以及代码实现

qq_54469537的博客 1172

约瑟夫环问题的解决方案(C++版)

约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。

约瑟夫环问题的三种解决方法

  约瑟夫环问题是一道很经典的算法题,相信大家也都很熟悉,这里我们就一起来看看一看这道经典算法题的解法。   约瑟夫环问题的描述如下 编号为 1-N 的 N 个士兵围坐在一起形成一个圆圈,从编号为 1 的士兵开始依次报数(1,2,3…这样依次报),数到 m 的 士兵会被杀死出列,之后的士兵再从 1 开始报数。直到最后剩下一士兵,求这个士兵的编号。 方法一   采用数组来解决这道题。   创建一...

qq_44848423的博客 5216

约瑟夫的问题的解决方案

用C语言对约瑟夫问题进行编程,从而解决最终的排序问题

java小项目约瑟夫环动画演示(数据结构课程设计)

大一时写的数据结构课程设计,动画演示约瑟夫环,代码结构较乱,仅供参考!

约瑟夫环问题 两种解决思路 链表 数组

分享做题过程中的一些记录 有个游戏是这样的:首先,让参与者围成一个大圈。然后,随机指定一个数m,让编号为0的人开始报数。每次喊到m-1的那个人要出列,并且不再回到圈中,从他的下一个人,继续0...m-1报数....这样下去....直到剩下最后一个人。请你试着想下,哪个参与者会留到最后呢?(注:参与者编号是从0到n-1) 经典的约瑟夫环问题,现分别采用链表和数组方式解决 方法一:数组 #include <iostream> using namespace std; int main()

little__black_的博客 4503

Android自定义组件——单向滑动(仿facebook)

一个仿Facebook和人人网的侧滑效果,详细请看:Android自定义组件系列【3】——自定义ViewGroup实现侧滑(http://blog.youkuaiyun.com/dawanganban/article/details/24007215)

经典算法--约瑟夫环问题的三种解法

约瑟夫环问题,这是一个很经典算法,处理的关键是:伪链表 问题描述:N个人围成一圈,从第一个人开始报数,报到m的人出圈,剩下的人继续从1开始报数,报到m的人出圈;如此往复,直到所有人出圈。(模拟此过程,输出出圈的人的序号) 在数据结构与算法书上,这个是用链表解决的。我感觉链表使用起来很麻烦,并且这个用链表处理起来也不是最佳的。 我画了一个图用来理解: 有如下问题需要首先考虑: 1、“圈...

飞鸿踏雪泥的博客 11万+

约瑟夫问题的算法解决方案

约瑟夫问题的算法解决方案,利用循环链表解决这个问题

深入Linux网络子系统:STMMAC驱动如何通过MDIO总线与PHY芯片“对话”

本文深入解析了Linux网络子系统中STMMAC驱动通过MDIO总线与PHY芯片的通信机制。详细介绍了MDIO总线的注册流程、PHY设备的绑定机制以及设备树配置,帮助开发者理解MAC控制器与PHY芯片的协作基础,优化网络通信性能。

weixin_26897585的博客 448

Java 约瑟夫环问题解决方案

约瑟夫环Java解决方案 效率还是蛮高的。

tongyi55555的专栏 1326

单目视觉定位:深入解析PNP算法在机器人导航中的实战应用

本文深入解析了PNP算法在机器人单目视觉定位中的核心原理与实战应用。通过拆解坐标变换四步,详细阐述了如何从二维图像点反求相机三维位姿。文章结合OpenCV的solvePnP函数,提供了算法选择、参数调优及结果后处理的实用指南,并针对机器人导航中的特征匹配、尺度不确定性等挑战,给出了鲁棒性优化与实时性平衡的解决方案。

weixin_29083649的博客 419

约瑟夫环问题的两种解决方案

一.约瑟夫环问题 约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为1的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。 一.循环链表解决 #include<stdlib.h> typedef struct node { unsigned int number; struct node * next; }* pt,node; void creat(pt * c,

weixin_45841522的博客 416

【DICOM后处理】qt+vs 实现DICOM数据四视图显示

方法用于 设置 2D 视图的“向上”方向,即定义图像在屏幕坐标系中的朝向。该方法直接影响影像的显示方向,尤其在多平面重建(MPR)或非标准切面显示时至关重要。:方法用于 设置渲染窗口在屏幕上的显示位置(以像素为单位)。它控制的是 VTK 渲染窗口的左上角在屏幕坐标系中的坐标位置。DICOM四视图通常指同时显示医学影像的四个不同平面或视角,用于全面分析三维数据(如CT、MRI等)。:基于 标量值 设置不透明度(控制不同组织的显示),显示骨骼or显示高密度流体等。默认朝向原点 (0, 0, 0)

weixin_41804847的博客 1325

OpenCV 开闭运算

开运算和闭运算是将腐蚀和膨胀按照一定的次序进行处理。 但这两者并不是可逆的,即先开后闭并不能得到原来的图像。 开运算 开运算是先腐蚀后膨胀,其作用是:分离物体,消除小区域。特点:消除噪点,去除小的干扰块,而不影响原来的图像。 闭运算 闭运算与开运算相反,是先膨胀后腐蚀,作用是消除/“闭合”物体里面的孔洞,特点:可以填充闭合区域。 cv.morphologyEx(img, op, kernel) img: 要处理的图像 op: 处理方式:若进行开运算,则设为cv.MORPH_OPEN,若进行闭

꧁༺ʚvv༒catɞ༻꧂的博客 949

约瑟夫问题的通用解决方案-猴子选大王

约瑟夫问题的通用解决方案,用了队列(jdk里面的)   题目描述:n只猴子要选大王,选举方法如下:所有猴子按 1,2 ……… n 编号并按照顺序围成一圈,从第 k 个猴子起,由1开始报数,报到m时,该猴子就跳出圈外,下一只猴子再次由1开始报数,如此循环,直到圈内剩下一只猴子时,这只猴子就是大王。 import sun.misc.Queue; /** * @author: ...

hedahai119的专栏 251

大一Python之循环解决实际问题

pythin之循环解决实际问题

weixin_66263546的博客 2287

约瑟夫问题 之Java两种解决方案

前两天到京东面试,笔试题中有关于“约瑟夫”编程的题目,当时就懵了,那么短时间内也写不出来,最后没有写出来,是面试中的一大遗憾...... 下面给出Java使用循环链表和数组解决“约瑟夫”问题的代码。

zh_haining的博客 1051

Amesim管路仿真进阶:如何用阻力管实现不规则管路的高精度模拟

本文深入探讨了在Amesim仿真中,如何利用阻力管(Orifice with Table)元件,特别是TFORT0子模型,实现对不规则管路的高精度模拟。通过直接输入基于测试或CFD的流量-压降数据,该方法能有效弥补标准管路模型在复杂流道、内部结构复杂等场景下的不足,为液压、热管理等系统仿真提供精准可靠的部件模型。

cicd6pipeline的博客 670

Android 13 SPRD 源码默认打开多用户实际无效果问题修复

【代码】Android 13 SPRD 源码默认打开多用户实际无效果问题修复。

m0_60898338的博客 449

约瑟夫环问题Java解决方案:高效算法实现经典问题

约瑟夫环问题Java解决方案:高效算法实现经典问题 去发现同类优质开源项目:https://gitcode.com/ 在计算机科学中,约瑟夫环问题是一个经典的问题,其解决方案不仅考验算法设计能力,也体现了对数据结构的深刻理解。下面,我将为您介绍一个高效的Java解决方案,助您轻松解决约瑟夫环问题。 项目介绍 约瑟夫环问题(Java)解决方案是一个开源项目,它通过Java语言实现了对约瑟夫环问题的求...

gitblog_06776的博客 272

提示词工程在机器翻译质量提升中的应用

Introduction to Prompt Engineering in Machine Translation Quality Improvement Keywords

AI天才研究院 1151

循环链表:约瑟夫问题的解决方案

本文介绍了使用循环链表解决经典约瑟夫问题的方法。首先解释了约瑟夫问题的定义,即n个人围成一圈按规则淘汰直到只剩一人。然后详细说明了循环链表的数据结构特点及其实现方式,包括节点类、追加节点和删除节点等操作。接着展示了如何用循环链表模拟约瑟夫问题的解决过程,通过遍历和删除节点找出幸存者。文章还对比了数学递归解法与链表解法的优缺点,指出链表解法更直观且易于扩展。最后总结了循环链表的应用价值,并鼓励读者思考更复杂的变种问题。全文通过清晰的代码示例和逻辑分析,帮助读者掌握这一经典算法问题的解决方案。

从不水文,坚持创作,加油 930

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

南邮 OJ 1597 约瑟夫问题

约瑟夫问题 时间限制(普通/Java) : 1000 MS/ 3000 MS          运行内存限制 : 65536 KByte 总提交 : 253            测试通过 : 37  比赛描述 17世纪的法国数学家加斯帕在《数目的游戏问题》中讲的一个故事:15个教徒和15 个非教徒在深海上遇险,必须将一半的人投入海中,其余的人才能幸免于难,于是想了一个办法:30个

呈凹的博客 574

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

约瑟夫环问题

以前写的程序,今天在整理文件的时候发现了,贴出来有需要的朋友可以参考! 问题提出: 约瑟夫环是一个数学的应用问题:已知n个人(以编号0,2,3...n-1分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。 解决方案: 约瑟夫环有递归和非递归两种解决方案。 1. 非递归

给永远比拿愉快 1515

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

上一篇: 如何修改Android系统的版本号
下一篇: 高通平台使用64位win7系统无法安装驱动的解决方法
fight for survive
博客等级 码龄15年 25粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值