Josephu问题

数据结构与算法-约瑟夫环 单向循环链表(约瑟夫环) 设编号为1,2,…n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列 解题思路 1.首先初始化单向循环链表,然后定义一个helper辅助变量,指向链表的尾节点。 开始报数前,先让helper和first移动k-1次... 阅读详情

Josephu问题(丢手帕问题)

    Josephu问题为:设编号为1,2,...n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。

    提示:用一个不带头结点的循环链表来处理Josephu问题:先构成一个有n个结点的单循环链表,然后由k结点起从1开始计数,计到m时,对应结点的人从链表中删除,然后再从被删除结点的下一个结点又从1开始计数,直到最后一个结点从链表中删除算法结束。

1.小孩子类

//小孩子
class Child{
	int num;//编号
	Child nextChild=null;//引用类型,指向下一个小孩
	public Child(int num){
//		给一个编号
		this.num=num;
	}
}

2.构造环形链表

//构造环形链表
class CycLink{
//	先定义一个指向链表第一个小孩的引用
//	指向第一个小孩的引用,不能动
	Child firstChild=null;
	Child temp=null;
	
	int len=0;//表示共有几个小孩
	int k=0;
	int m=0;
//	设置m数几下
	public void setM(int m){
		this.m=m;
	}	
//	设置链表的大小
	public void setLen(int len){
		this.len=len;
	}
//	设置第几个人开始数数
	public void setK(int k){
		this.k=k;
	}
//	开始play
	public void play(){
		Child temp=this.firstChild;
//		1.先找到开始数数的人
		for(int i=1;i<k;i++){
			temp=temp.nextChild;			
		}
		while(this.len!=1){
//			2.数m下
			for(int j=1;j<m;j++){
				temp=temp.nextChild;
			}
//			找到要出圈的前一个小孩
			Child temp2=temp;
			while(temp2.nextChild!=temp){
				temp2=temp2.nextChild;
			}
			System.out.println("出圈的小孩编号:"+temp2.nextChild.num);
//			3.将数到m的小孩,退出圈
			temp2.nextChild=temp.nextChild;
//			让temp指向下一个数数的小孩
			temp=temp.nextChild;
			this.len--;
		}
		System.out.println("最后出圈的小孩:"+temp.num);
	}
	
//	初始化环形链表
	public void createLink(){
		for(int i=1;i<=len;i++){
//			创建第一个小孩
			if(i==1){
				Child ch=new Child(i);
				this.firstChild=ch;
				this.temp=ch;
			}else if(i==len){
//				继续创建小孩
				Child ch=new Child(i);
				temp.nextChild=ch;
				temp=ch;
				temp.nextChild=this.firstChild;
			}else{
//				继续创建小孩
				Child ch=new Child(i);
				temp.nextChild=ch;
				temp=ch;
			}
		}
	}
	
//	打印环形链表
	public void show(){
//		定义一个跑龙套
		Child temp=this.firstChild;
		do{
			System.out.println(temp.num+"");
			temp=temp.nextChild;
		}while(temp!=this.firstChild);
	}
}

3.主函数

public class LianBiaoTest {
	public static void main(String[] args) {
		CycLink cyclink=new CycLink();
		cyclink.setLen(5);//链表长度
		cyclink.createLink();//创建链表
		cyclink.setK(1);//从第几个开始数,从第二个小孩开始数
		cyclink.setM(3);//数几下
		cyclink.show();
		cyclink.play();
	}
}

4.运行结果


5.原理图




Josephu环(约瑟夫环)问题_Python解决 """ 幸运的女人(Josephu环问题) 有15个男人和15个女人乘船在海上遇险,为了让一部分人活下来,不得不将其中15个人扔到海里, 有个人想了个办法让大家围成一个圈,由某个人开始从1报数,报到9的人就扔到海里面, 他后面的人接着从1开始报数,报到9的人继续扔到海里面,直到将15个人扔到海里。 最后15个女人都幸免于难,15个男人都被扔到了海里。 问这些人最开始是怎么站的,哪些位置是男人,哪些位置是女人。 """ people = [True] * 30 # True代表活人 index, dead 阅读详情

相关推荐

XMind文件解析黑科技:用Python实现版本自适应读取(兼容2010-2024)

本文深入探讨了如何利用Python实现XMind文件的版本自适应解析,兼容从2010到2024年的各版本。通过分析XMind文件作为ZIP压缩包的本质,文章提供了智能探测文件内部结构(JSON或XML)并构建健壮读取逻辑的完整方案,有效解决了版本兼容性难题,并演示了将解析数据转换为PlantUML等下游应用的实战案例。

weixin_29041767的博客 683

约瑟夫(Joseph)问题

4. 约瑟夫(Joseph)问题 [问题描述] 约瑟夫(Joseph)问题的一种描述是:编号为 1,2,…,n 的 n 个人按顺时针方向围坐一圈,每人持有一个密码(正整数),一开始任选一个整数作为报数上限 m,从第一人开始按顺时针方向从自 1 开始顺序报数,报到 m 时停止报数。报 m 的人出列,将他的密码作为新的 m 值,从他的顺时针方向上的下一个人开始重新从 1 报数,如此下去,直至所有人全部...

mo_chen1025的博客 8579

C++继承与多态 - 继承多态原理01

C++继承多态原理讲解

大秦坑王的专栏 2978

约瑟夫问题(Josephus problem)详解

约瑟夫问题 1)设编号为 1,2,3 ... n 的 n 个人围坐一圈。 2)约定编号为 k (1 <= k <= n)的人从 1 开始报数,数到 m 的那个人出列。 3)它的下一位又从 1 开始报数,数到 m 的那个人又出列,依此类推,直到所有人出列为止。 4)由此产生一个出列编号的序列。 解题思路 1)构建一个结构体 Boy No 为 Boy 的编号。 Next 指针指向下一个 Boy。 代码如下: // 小孩的结构体 type Boy struct {...

XPiedPiperX的博客 1万+

Android Geckoview实战:5分钟搞定JS与原生交互(附完整Demo代码)

本文详细介绍了在Android应用中使用GeckoView替代系统WebView,构建稳定高效的JavaScript与原生代码交互桥梁的实战方法。通过WebExtension架构,文章提供了从环境配置、扩展开发到Android端集成的完整步骤,并附有可运行的Demo代码,帮助开发者快速解决混合应用中的兼容性问题。

u5v6w7的博客 935

AI驱动Spine骨骼动画生成:从图像拆分到动画自动化的全流程解析

计算机视觉与生成式AI技术正深度赋能传统数字内容生产流程。在2D动画制作领域,骨骼动画技术通过模拟真实生物关节运动,实现了角色动画的高效制作与灵活控制。其核心原理在于将角色拆分为独立部件,通过骨骼层级关系驱动部件变换,结合关键帧插值算法生成流畅动作。这项技术的工程价值在于大幅降低动画制作门槛,提升内容生产效率,尤其适用于游戏开发、影视预演、广告设计等需要快速原型迭代的场景。本文聚焦于如何利用SIFT特征匹配、RANSAC几何验证等CV算法实现部件自动对位,并结合动画12原则的程序化实现,构建从单张角色立绘到

weixin_28696185的博客 1519

POJ 百练 2746: 约瑟夫问题

时间限制: 1000ms 内存限制: 65536kB 描述 约瑟夫问题:有n只猴子,按顺时针方向围成一圈选大王(编号从1到n),从第1号开始报数,一直数到m,数到m的猴子退出圈外,剩下的猴子再接着从1开始报数。就这样,直到圈内只剩下一只猴子时,这个猴子就是猴王,编程求输入n,

youyang1991的专栏 3517

Sigrity SPEED2000 TDR TDT Simulation模式如何进行时域阻抗仿真分析操作指导-差分信号

Sigrity SPEED2000 TDR TDT Simulation模式如何进行时域阻抗仿真分析操作指导-单端信号详细介绍了单端信号如何进行TDR仿真分析,下面介绍如何对差分信号进行TDR分析,还是以下图为例进行分析。Impedance是时域阻抗曲线,也是最主要的观测指标,注意:impedance曲线的时间刻度不是延时,延时=时间刻度/2,因为TDR测量的是用一来一回的原理去测量的。Use Lossy peeling 默认不勾选,勾选的话代表同时仿真无损和有损方案,不勾选代表仅仿真有损方案。

weixin_54787054的博客 857

单项环形链表

单向环形链表应用场景 Josephu(约瑟夫、约瑟夫环) 问题 Josephu 问题为:设编号为 1,2,… n 的 n 个人围坐一圈,约定编号为 k(1<=k<=n)的人从 1 开始报数,数 到 m 的那个人出列,它的下一位又从 1 开始报数,数到 m 的那个人又出列,依次类推,直到所有人出列为止,由 此产生一个出队编号的序列。 提示:用一个不带头结点的循环链表来处理 Josephu 问题:先构成一个有 n 个结点的单循环链表,然后由 k 结 点起从 1 开始计数,计到 m 时,对应结点从链

qq_37312838的博客 357

微信小程序推广策略,打开小程序领域流量大门

本文旨在为小程序开发者、运营者和企业主提供一套完整的微信小程序推广策略体系,帮助他们在竞争激烈的小程序生态中获得更多流量和用户。内容涵盖从0到1的冷启动策略,到成熟期的增长技巧。本文将首先介绍小程序的基础推广设置,然后深入探讨各种流量获取渠道,接着分析数据驱动的优化方法,最后展望未来发展趋势。小程序:无需下载安装即可使用的应用,运行在微信生态内:独立访客数:页面浏览量转化率:完成目标行为的用户比例留存率:用户在一定时间后仍活跃的比例自然流量获取:通过优化搜索、完善资料等方式获得基础流量社交裂变。

小程序开发 1031

操作系统实验一到实验九合集(哈工大李治军)

操作系统实验一到实验九合集(哈工大李治军) 有详细代码及注释,程序已在本地测试,均能跑通

leoabcd12的博客 5万+

Josephu问题的数学解法

今天重新做了次Josephu问题,之前做的是使用链表来实现的,直接模拟了整个过程,这次使用了数学解法。 Josephu问题:编号为0到N-1的N个人围成一圈,然后从1开始报数,报到M的那个人被杀掉,剩下的人接着从1开始报数,求最后的幸存者编号。 首先对于对于第一轮: 0, 1, 2, ......, M-2, M-1, M, M+1, ......N-2, N-1 -----------

愤怒的小草 1856

从数据到行为的可控暴露:SAP RAP 中的 BO Projection 与 BO Interface 全面实践指南

本文系统梳理了ABAP RAP中BO Projection与BO Interface的定位与实现方式。BO Projection面向业务服务(如UI/API),通过CDS投影视图(as projection on)和行为定义裁剪字段与操作,实现差异化暴露;BO Interface则为EML代码和跨组件复用提供稳定访问层,使用transactional_interface标识。两者均遵循C_/I_命名规范,通过分层设计实现封装性、安全性和灵活性。文中结合真实案例展示了如何通过不同投影满足多角色需求,并详细说明

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 249

单向环形链表解决Josephu问题

单向环形链表解决Josephu问题 /** * Josephu 问题: 设编号为1,2,… n 的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m的那个人出列 * 他的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到所有人出列为止 * * 构建一个单向的环形链表: * 先创建第一个节点,让first指向该节点,并形成环形 * 后面当我们每创建一个新节点,就把该节点加入到已有的环形链表 * * 遍历环形链表: * 先让一个辅助指针 curBo

orang_e的博客 198

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Josephu(约瑟夫)问题

问题描述: 设编号为1,2,3…n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,以此类推,直到所有人出列为止,由此产生一个出队编号的序列. 提示 用一个不带头结点的循环链表来处理Josephu问题:先构成一个有n个节点的单循环链表,然后由k节点起从1开始计数,计到m时,对应节点从链表中删除,然后再从...

weixin_42379941的博客 520

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

数据结构和算法学习日记——Josephu问题的链表解决

Josephu问题 Josephu问题又称为Josephu环, 人们站在一个等待被处决的圈子里。 计数从圆圈中的指定点开始,并沿指定方向围绕圆圈进行。 在跳过指定数量的人之后,执行下一个人。 对剩下的人重复该过程,从下一个人开始,朝同一方向跳过相同数量的人,直到只剩下一个人,并被释放。 程序实现 采用单向链表实现,时间复杂度为O(n*m) package com.SingleCircleLinke...

我要,我要,我还要 237

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

单向环形链表&解决Josephu问题

单项环形链表 思路 长度为1时 (1)新创建的boy节点是首节点。 firts=boy。 (2)自己构成环形链表。 first.next = frist。 (3)first是首节点,同时又是尾节点,辅助指针(变量)指向fisrt。 curBoy=first。 长度不为1时 (1)讲boy节点添加至环形链表最后。 curBoy.next = boy;//curBoy节点永远是环形链表的尾结点 (2)构成环形链表。 boy.next = first。 // 创建一个Boy类,表示一个节点(Boy 节点就是个

PurineKing之博客 218

[JAVA练习] Josephu 约瑟夫问题

package com.Josephu; /** * Josephu问题,设编号为 1,2,...,n的n个人围坐一圈,约定编号为k(1的人从1开始报数,数到m的那个人出列, * 他的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到所有的人出列为止,由此产生一个出队编号的序列。  * 来源于韩顺平所著《JAVA从入门到精通》Created by william on 15-10-

yqhzh的专栏 581

数据结构之GO环形链表解决josephu(约瑟夫)问题

josephu问题 Josephu问题为:设编号为1,2,…n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m 的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列,用Go语言进行实现如下: package main import ( "fmt" ) //小孩的结构体 type Boy struct { No int // 编号 Next *Boy // 指向下一个小孩的指针[默认值是nil] }

weixin_43318506的博客 252

Josephu 问题

用一个不带头结点的循环链表来处理 Josephu 问题:先构成一个有 n 个结点的单循环链表,然后由 k 结点起从 1 开始计数,计到 m 时,对应结点从链表中删除,然后再从被删除结点的下一个结点又从 1 开始计数,直到最后一个结点从链表中删除算法结束。提示:用一个不带头结点的循环链表来处理 Josephu 问题:先构成一个有 n 个结点的单循环链表,然后由 k 结点起从 1 开始计数,计到 m 时,对应结点从链表中删除,然后再从被删除结点的下一个结点又从 1 开始计数,直。此产生一个出队编号的序列。

papillonlong的博客 170

Josephu问题实现

我的Josephu问题Java实现。 View Code 1 /* 2 * 功能:实现Josephu算法 3 * 作者:陈沛锐 4 * 时间:2013.04.20 5 * 6 * 注意:链表指针直接是链表中的某一元素。 7 * 难点: 8 * 1.在开始数字和循环数字都为1的特殊情况下的结束条件? ...

aal54952的博客 180

Josephu(约瑟夫环)问题

Josephu 问题为:设编号为1,2,… n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m 的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。 代码如下: public class Josepfu { public static void main(String[] args) { // 测试一把看看构建环形链表,和遍历是否ok CircleSingleLinked

qq_43773170的博客 204
上一篇: 深入JSP之JSP标签以及开发模式
下一篇: 使用SpringMVC时添加了web.xml中的DispatchServlet配置后出现Tomcat服务器无法启动的问题
Java_jfei
博客等级 码龄10年 55粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值