C语言循环链表约瑟夫环问题

约瑟夫环问题(循环链表)C语言 约瑟夫环问题(循环链表)C语言 问题描述 约瑟夫环问题是由古罗马的史学家约瑟夫提出的,他参加并记录了公元66—70年犹太人反抗罗马的起义。约瑟夫作为一个将军,设法守住了裘达伯特城达47天之久,在城市沦陷之后,他和40名死硬的将士在附近的一个洞穴中避难。在那里,这些叛乱者表决说“要投降毋宁死”。于是,约瑟夫建议每个人轮流杀死他旁边的人,而这个顺序是由抽签决定的。 规则: 在一间房间总共有m个人,只能... 阅读详情

本实验最难的部分是循环链表的建立过程,其余的都只是很简单的部分,先不讲了,看代码应该会好理解的。



# include <stdio.h>
# include <malloc.h>

typedef struct node
{
	int number;
	struct node *next;
}Lnode,*Linklist;

Linklist InitRingLList(int n)					//循环链表建立约瑟夫环
{
	Lnode *R,*p,*q;
	int i;
	R = (Lnode *)malloc(sizeof(Lnode));						
	q = R;
	for(i = 1;i < n;i ++)
	{
		p = (Lnode *)malloc(sizeof(Lnode));					
		q -> number = i;						
		q -> next = p;
		q = p;
	}
	p -> number = n;
	p -> next = R;
	R = p;										//形成循环链表
	return R;
}

void Josephus(Linklist R,int n,int k)
{
	int i,j;
	Lnode *p,*q;
	p = R;
	for(i = 0;i < n;i ++)
	{
		for(j = 1;j <= k-1;j ++)				//每次从"1"开始报数
			p = p -> next;						
		q = p -> next;
		p -> next = q -> next;
		printf("%d ",q->number);
		delete q;
	}
	printf("\n");
}

int main()
{
	int n,k;
	printf("输入约瑟夫环的人数:");
	scanf("%d",&n);
	printf("输入约定的编号:");
	scanf("%d",&k);
	Linklist R;
	R = InitRingLList(n);
	Josephus(R,n,k);
	return 0;
}

最近的自己算是整理一下自己前面那段时间得学习吧 ,对于学计算机的人来说,如果想成为大牛大神,数据结构是很重要的,有技术的人是饿不死的。相信自己哈 ------Dash





约瑟夫环问题(C语言版)——双向循环链表和静态链表实现 文章目录题目描述双向循环链表静态链表法公式法 约瑟夫环问题,也称圆桌问题,解决的方案很多,在此,给出三种解决方案,双向循环链表,静态链表和公式法 题目描述 编号为1,2,…,n的n个人按顺时针方向围坐在一张圆桌周围,每人持有一个密码(正整数)。一 开始任选一个正整数m作为报数上限值,从第一个人开始按顺时针方向自1开始报数,报到m时停止报数,报m的那个人出列,将他的密码作为新的m值,从他顺时针方向的... 阅读详情

相关推荐

约瑟夫环问题(C语言循环链表)

一:问题描述约瑟夫环问题是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列,他的下一个人又开始报数,数到m的那个人又出列,依次规律重复下去,圆桌周围的人全部出列。二:算法原理约瑟夫环运作如下:1:一群人围坐在一起成环状2:从某个编号开始报数(如:k)3:数到某个数(如:m)的时候,此人出列,下一个人重新报数4:一直循环...

leikun153的博客 1万+

【NOI题解】 3.2数据结构之指针和链表

NOI题目地址(3.2数据结构之指针和链表):http://noi.openjudge.cn/ch0302/ 这部分的题解出于练习指针和链表的目的,我都是自定义的链表结构。实际上C++提供了STL list链表容器,对于链表元素的增删查反转等操作都有封装好的接口,直接使用将会得到非常简洁的代码。1748:约瑟夫问题分析:用循环链表解决约瑟夫环问题 关键在于: - 删除链表结点的操作 -

赞美月亮的专栏 2025

手把手教你用RMII接口配置以太网PHY芯片(附YT8512实战代码)

本文详细介绍了如何使用RMII接口配置以太网PHY芯片,以国产YT8512为例,提供从硬件设计到软件驱动的全流程实战指南。内容包括RMII接口技术解析、YT8512硬件设计要点、驱动开发实战代码及常见问题排查,帮助开发者快速实现以太网通信功能。

mac99的博客 988

约瑟夫环的问题编程C++实现

已知 n 个人(以编号1, 2, 3 ,4, 5 ,6  ... .. .n)围坐一张圆桌周围。从编号为k 的人开始报数,数到m 的那个人出列;他的下一个人又从 1开始报数,数到m的那个人又出列;依次规律重复下去,直到圆桌周围的人全部出列。请用C++编程。 整个程序分为3个步骤: 第一步:建立一个有n个元素的循环链表,链表是从1的编号开始的。 第二步:是从链表的表头数到第 k 个值。 第三

Eagleest的专栏 2万+

1.5元主控搞定高精度电流电压采集?STC8G1K08+INA180A3硬件设计全解析

本文详细解析了如何利用成本仅1.5元的STC8G1K08单片机与INA180A3电流检测放大器,构建一套高精度、低成本的电流电压采集系统。文章深入剖析了硬件设计精髓,包括利用MCU内部上拉电阻直驱数码管以节省成本、INA180A3的配置与计算,以及实现高频率采集并与上位机高速通信的软件策略,为嵌入式开发中的极致性价比设计提供了完整方案。

weixin_29166013的博客 593

南邮 2024 软件安全 实验四 自动脱壳+手动脱壳

这次这个实验很简单,就是一个简单的脱壳,然后进行爆破就行了,解法非常的多这里不多讲,会简单讲一下特殊情况这个点开是这样子:然后放进peid里面查看,我这个是原版的PEid,所以显示出来是这样:会显示nothing found,但其实如果你使用吾爱破解的魔改过的peid,它就会显示具体的壳名:然后你点击右下角的那个箭头,里面会有很多的插件用来自动脱壳:你也可以使用这个通用脱壳器,但是脱壳后的程序无法运行,这个放到后面讲。

ARbing_an的博客 2534

POJ 百练 2746: 约瑟夫问题

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

youyang1991的专栏 3515

KV STUDIO的安装与实践(一)

KV STUDIO是一种软件开发工具,用于编写、调试和管理基于Key-Value(键-值)存储的应用程序。KV STUDIO提供了一个集成开发环境(IDE),使开发人员可以方便地创建和管理键-值数据库,并编写逻辑和业务规则来操作和查询这些数据。它支持多种编程语言和平台,并提供了丰富的API和工具来简化开发过程。使用KV STUDIO,开发人员可以快速构建高效、可靠的键-值存储系统,并实现各种应用程序,如缓存、会话管理、配置存储等。本次使用plc进行案例讲解,结合小编的亲身经历,仅供参考!

weixin_47514459的博客 6291

C++经典题目:约瑟夫环问题

问题描述: 有n个人围成一圈,顺序排号。从第一个人开始报数(1~3报数),凡报到3的人退出圈子,问最后留下的人原来排在第几号。 分析: 首先由用户输入人数n,然后对这n个人进行编号【因为如果不编号的话,我们就不能知道最后是哪位童鞋留下来了:)】 然后就开始了一圈一圈的循环,不断形成新的圈子,不断有人被淘汰,那么循环到什么时候截止呢?对只剩最后一个人,也就是说淘汰n-1了个人的时候,...

weixin_33897722的博客 954

Qt Quick/QML入门到精通_专栏demo对应文章目录(目前50个左右demo/长期更新)

自定义图标下拉列表框的效果如下所示:自定义三态按钮的效果如下所示:传送门:53.qt quick-自定义三态按钮、自定义图标下拉列表框_诺谦的博客-CSDN博客传送门:59.qt quick-qml调色板(颜色取色器)实现、自定义QQuickStyle样式_诺谦的博客-CSDN博客63.qt quick-QML侧边滑动栏(不需要任何图片资源,支持自定义左右方向和大小)_诺谦的博客-CSDN博客_qt实现好看侧边栏。...

抵抗时间扭曲,坚持做一件有意义的事 2万+

innovus获取mem pin shape box脚本

innovus mem 的pin shae只能通过attitude editor看属性获取其pin shape的box,但是想用脚本处理一定box时,没有别的办法能直接获取box属性。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 1099

【C/C++】约瑟夫环问题

n个人(0,1,2,3,4…n-1),围成一圈,从编号为k的人开始报数,报数报到m的人出队(报数是1,2,…下次从出队的人之后开始重新报数,循环往复,当队伍中只剩最后一个人的时候,那个人就是大王。现在,给定n,k,m,输入一行包含三个整数n,k,m。

强者征服今天,懦夫哀叹昨天,懒汉坐等明天。 1905

【科研建模】Pycaret自动机器学习框架使用流程及多分类项目实战案例详解

对pycaret的使用流程进行梳理,并详细介绍了基于多分类预测的案例

lys_828的博客 777

【C语言】数据结构循环链表解决约瑟夫环问题

循环链表解决约瑟夫环问题 约瑟夫问题 假设有n个人围成一圈,然后对每个人按顺序编号1,2,3,…..,n,规定从1号按顺序开始报数,报到k的人出局,之后下一个人再从1开始报数,报到k的人在出局,一直进行下去,问:最后一个出局者为几号? 样例: 假设有8个人,每次报数报到4的人出局,则过程如下。 四号出局 八号出局 五号出局 二号出局 一号出局 三号出...

zhangshuo的博客 2万+

国债期货的日线趋势跟踪策略实现(基于backtrader框架)

通过backtrader框架,我们可以轻松地实现国债期货的日线趋势跟踪策略,并进行回测和验证。通过这种策略,我们可以尝试捕捉国债期货价格的短期趋势,并根据趋势的方向进行交易决策。backtrader提供了许多内置的指标、订单类型和其他功能,可以帮助你进一步优化和改进你的策略。它提供了丰富的工具和功能,使我们能够快速实现和验证我们的交易想法。方法中,我们根据当前价格和前一天的价格判断趋势的方向,并根据趋势的变化进行买入或卖出操作。然后,我们设置了初始资金和交易手续费,并将我们定义的策略。来跟踪每日的收盘价。

NisyPhilosophy的博客 390

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

循环链表来实现约瑟夫环问题 c语言

  已知n个人(以编号1,2,3,…,n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从K开始报数,数到m的那个人又出列;依次规律重复下去,直到圆桌周围的人全部出列。 解:本题是约瑟夫环问题的实际场景。可用循环链表来实现。问题的核心步骤为: 建立无头结点的循环链表; 确定第一个报数人的位置; 不断从链表中删除结点,直到链表为空。 代码如下: #include<stdio.h> #include<stdlib.h> //不带头结点的循环链

cleverlemon的博客 738

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

C语言实现约瑟夫环的问题(循环链表)

写博客的第二天,简单说一个小问题,约瑟夫环问题的实现。 本文主要是通过循环链表实现(建议掌握后再来看)。 问题是这样的,犹太史学家约瑟夫被罗马人gank后和39个犹太人同时躲进山洞,然后其余39人有点上头准备刚到底,约瑟夫想我的人生才刚开始有大把的plmm等我泡我不能就这么死了,于是便忽悠除他朋友以外的其他人举行一个自杀游戏,大家围成一个圈,然后从第一个人开始每数到第3个,数到三的人就要自杀,然后...

goldenzhouzhuo的博客 1342

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

C语言双向循环链表的实现及约瑟夫环问题

看了这篇博主写的关于动态链表的文章,感触颇深,今天我就以c语言来实现双向循环列表并解决约瑟夫环问题。 (4条消息) 数据结构:动态链表(C语言描述)_知道什么是码怪吗?的博客-CSDN博客 一.约瑟夫环问题 已知 n 个人(以编号 1,2,3,…,n 分别表示)围坐在一张圆桌周围,从编号为 k 的人开始顺时针报数,数到 m 的那个人出列;他的下一个人又从 1 还是顺时针开始报数,数到 m 的那个人又出列;依次重复下去,要求找到最后出列的那个人? 例如有 5 个人,要求从编号为 3 的人开始,数到..

qq_51938362的博客 1448

约瑟夫环c语言循环链表密码,C语言基于循环链表解决约瑟夫环问题的方法示例...

本文实例讲述了C语言基于循环链表解决约瑟夫环问题的方法。分享给大家供大家参考,具体如下:概述:约瑟夫环问题,是一个经典的循环链表问题,题意是:已知 n 个人(以编号1,2,3,…,n分别表示)围坐在一张圆桌周围,从编号为 k 的人开始顺时针报数,数到 m 的那个人出列;他的下一个人又从 1 还是顺时针开始报数,数到 m 的那个人又出列;依次重复下去,要求找到最后出列的那个人。例如有 5 个人,要求...

weixin_29029731的博客 356

约瑟夫问题循环链表c语言,C语言基于循环链表解决约瑟夫环问题的方法示例

本文实例讲述了C语言基于循环链表解决约瑟夫环问题的方法。分享给大家供大家参考,具体如下:概述:约瑟夫环问题,是一个经典的循环链表问题,题意是:已知 n 个人(以编号1,2,3,…,n分别表示)围坐在一张圆桌周围,从编号为 k 的人开始顺时针报数,数到 m 的那个人出列;他的下一个人又从 1 还是顺时针开始报数,数到 m 的那个人又出列;依次重复下去,要求找到最后出列的那个人。例如有 5 个人,要求...

weixin_35878683的博客 307

约瑟夫环问题(C语言循环链表)

1、约瑟夫环问题(C语言循环链表) 我相信大家都可以画出这个图,知道大体的解题的思想,但是却不知道代码该怎么下手,因此,下面我直接上代码,代码中该注释的地方我都进行了注释,希望到大家有帮助; #include<stdio.h> #include <mm_malloc.h> typedef struct Node { int num; int password; struct Node *next; } Node, *LinkList; int

qq_50504109的博客 3605

c语言循环约瑟夫环,C语言基于循环链表解决约瑟夫环问题的方法示例

本文实例讲述了C语言基于循环链表解决约瑟夫环问题的方法。分享给大家供大家参考,具体如下:概述:约瑟夫环问题,是一个经典的循环链表问题,题意是:已知 n 个人(以编号1,2,3,…,n分别表示)围坐在一张圆桌周围,从编号为 k 的人开始顺时针报数,数到 m 的那个人出列;他的下一个人又从 1 还是顺时针开始报数,数到 m 的那个人又出列;依次重复下去,要求找到最后出列的那个人。例如有 5 个人,要求...

weixin_36087895的博客 179

数据结构课程设计(一):约瑟夫环报数问题(C语言单向循环链表实现)

题目要求 编号是1,2,…,n的n个人按照顺时针方向围坐一圈,每个人只有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个仍开始顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。设计一个程序来求出出列顺序。 要求:利用单向循环链表存储结构模拟此过程,按照出列的顺序输出各个人的编号。 测试数据:m的初值为20,n=7 ,7个人的密码依次为3,1,7,2,4,7,4,首先m=6,则正确

SSnTi的博客 2649

【C语言】循环链表解决约瑟夫环问题

约瑟夫环是个经典的问题。有M个人围坐成一圈,编号依次从1开始递增,现从编号为1的人开始报数,报到N的人出列,然后再从下一人开始重新报数,报到N的人出列;重复这一过程,直至所有人出列。求出列次序。本题要求用循环单链表实现。提示:开始时将循环单链表的指针变量设为空,设计实现尾部添加一人函数Append,添加第1人时,将结点的指针域指向自己,后面新添加人员时,在循环单链表指针变量所指尾部后添加新结点,并始终将循环单链表指针变量指向新添加结点,对应M个人的循环单链表中有M个结点;报数时,报到指定数后输出对应结点里.

yun_oyun的博客 5495

约瑟夫环问题的C语言实现:循环链表的经典应用

int val;}LisNode;我们定义了一个简单的链表节点结构,其中val存储人的编号,next指向下一个节点。直观性:使用循环链表直接模拟问题场景,代码易于理解完整性:包含完整的内存管理,避免内存泄漏健壮性:包含基本的错误处理机制约瑟夫环问题不仅是一个有趣的数学游戏,更是学习数据结构(特别是链表)和算法的绝佳案例。通过这个问题的求解,我们能够深入理解循环链表的操作、指针的运用以及递归思想的实际应用。这种"模拟法"虽然时间复杂度不是最优,但其思路清晰、实现直接,特别适合教学和算法入门学习。

qq_67169366的博客 1036
上一篇: C语言使用单链表的学生成绩管理系统
下一篇: C语言一元多项式相加问题
AKDash
博客等级 码龄14年 66粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值