循环链表——约瑟夫环

单向循环链表实现约瑟夫环(C语言) #单向循环链表实现约瑟夫环 #include <stdio.h> #include <stdlib.h> //提供malloc、free函数原型 /* 结点数据域数据类型 */ typedef int ElemType; /* 链表结点结构体 */ typedef struct LNode { ElemType data; //数据域 struct ... 阅读详情

PTA 7-2 约瑟夫环 (25 分)

N个人围成一圈顺序编号,从1号开始按1、2、3......顺序报数,报p者退出圈外,其余的人再从1、2、3开始报数,报p的人再退出圈外,以此类推。 请按退出顺序输出每个退出人的原序号。

输入格式:

输入只有一行,包括一个整数N(1<=N<=3000)及一个整数p(1<=p<=5000)。

输出格式:

按退出顺序输出每个退出人的原序号,数据间以一个空格分隔,但行尾无空格。

输入样例:

在这里给出一组输入。例如:

7 3

输出样例:

3 6 2 7 5 1 4

思路:构建循环链表模拟

#include<stdio.h>
#include<stdlib.h>
#define LEN sizeof(struct Student)
struct Lian_biao
{
	int num;
	struct Lian_biao *next;
};

struct Lian_biao *create(int N)//创建链表 
{
	struct Lian_biao *p1,*p2,*head;//定义两个开辟指针和头指针 
	int n=0;
	p1=p2=(struct Lian_biao*)malloc(LEN);//为开辟指针开空间 
	while(n<N)//输入次数为N 
	{
		n++;
		p1->num =n;//把数字存进去 
		if(n==1)head=p1;//初始把头指针给P1 
		else p2->next =p1->next ;//之后开始推行,p2要能替代p1,然后p1再去开辟新空间 
		p2=p1;//next和自己都献身给了p2
		p1=(struct Lian_biao*)malloc(LEN);//p1开辟空间 
	} 
	p2->next =head;//头尾相接,形成循环链表 
	free(p1);//释放空间 
	return head;//返回头指针 
}

vvoid print(struct Lian_biao *head,int N,int M)//打印函数,依赖头head和N,三个最重要参数 
{
	struct Lian_biao *p1,*p2;//双指针上场 
	int step=0;//计算次数 
	int n=0;
	p2=p1=head;//一开始都赋值头指针 
	while(p1!=NULL&&N>1)//还有人就打印 
	{
		step++;//报数累加 
		if(step==M)//如果等于报的数字,则出去 
		{
			N--;//总人数减一 
			step=1;
			n++;
			printf("%d ",p1->num );//打印出来 
			p2->next =p1->next ;//先接上,防止断链表 
			p2=p1->next ;//如果直接用这个语句,就会断,因为p2->nxet还是指向p1,后面就没了 
			free(p1);//被删除了,顺便释放 
			p1=p2;//又让p1指向当前结点 
		}
		p2=p1;//如果没出现踢人的情况,就正常移动,p2在p1后面 
		p1=p1->next ;//前进搜索 
	}
	printf("%d",p1->num );//打印最后一个 
}




int main()
{
	int N,M;
	scanf("%d%d",&N,&M);//输入 
	struct Lian_biao *head;
	head=create(N);
	print(head,N,M);
	return 0;
} 

 

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

相关推荐

约瑟夫环课程设计.rar

课程设计约瑟夫环c++源代码,报告齐全。

实验7-1 约瑟夫环

N个人围成一圈顺序编号,从1号开始按1、2、3…顺序报数,报p者退出圈外,其余的人再从1、2、3开始报数,报p的人再退出圈外,以此类推。 请按退出顺序输出每个退出人的原序号。 输入格式: 输入只有一行,包括一个整数N(1<=N<=3000)及一个整数p(1<=p<=5000)。 输出格式: 按退出顺序输出每个退出人的原序号,数据间以一个空格分隔,但行尾无空格。 输入样例: ...

懒羊羊的梦想 6266

嵌入式铁头山羊stm32-GPIO的四种输入模式-Day5

本文详细解析了GPIO的输入结构和工作原理,包括上拉/下拉模式、悬空设计、保护二极管机制等关键内容。重点阐述了不同输入模式下电流流向与电压变化,解释了上拉/下拉电阻、施密特触发器、保护二极管等元件的作用。特别对保护二极管的工作机制进行深入分析,说明其在过压/欠压时的钳位保护功能。同时解答了关于电压差、电流方向、负电压等常见疑问,并强调GPIO设计的灵活性(可配置上拉/下拉/悬空)是为了适应不同外设需求。全文通过电路分析和生活类比,帮助读者理解GPIO输入电路的工作原理和设计考量。

古泽汉书的博客 1993

PTA 7-2 约瑟夫环 (25 分)

N个人围成一圈顺序编号,从1号开始按1、2、3......顺序报数,报p者退出圈外,其余的人再从1、2、3开始报数,报p的人再退出圈外,以此类推。 请按退出顺序输出每个退出人的原序号。 输入格式: 输入只有一行,包括一个整数N(1<=N<=3000)及一个整数p(1<=p<=5000)。 输出格式: 按退出顺序输出每个退出人的原序号,数据间以一个空格分隔,但行尾无空...

BigDream123的博客 1万+

STM32F103 CAN通信避坑指南:从标准库配置到收发测试的完整流程

本文详细介绍了STM32F103 CAN通信的实现流程,从标准库配置到收发测试,帮助开发者避开常见陷阱。内容涵盖硬件连接、波特率计算、过滤器配置及错误处理等关键环节,提供实用的代码示例和调试技巧,确保CAN通信的稳定性和可靠性。

weixin_30627341的博客 325

Polymarket链上预测市场自动化交易代理开发实战指南

自动化交易代理是量化交易的核心工具,它通过预设的算法规则,自动执行市场分析、决策与下单操作,旨在提升交易效率与纪律性。其技术原理通常涉及实时数据获取、策略引擎计算、交易执行与风险管理等模块的协同工作。在区块链与DeFi领域,这类代理的价值尤为凸显,能够高效处理链上合约交互,捕捉去中心化市场的套利机会。具体到应用场景,链上预测市场如Polymarket,为自动化策略提供了丰富的博弈标的。本文以Polymarket交易代理项目为例,深入剖析其基于Node.js与ethers.js的技术栈实现,详解从环境配置、策

weixin_42533910的博客 581

PTA 7-1 约瑟夫环 (25分)

PTA 7-1 约瑟夫环 (25分) 作者: 李廷元单位: 中国民用航空飞行学院时间限制: 400 ms内存限制: 64 MB代码长度限制: 16 KB N个人围成一圈顺序编号,从1号开始按1、2、3…顺序报数,报p者退出圈外,其余的人再从1、2、3开始报数,报p的人再退出圈外,以此类推。 请按退出顺序输出每个退出人的原序号。 输入格式: 输入只有一行,包括一个整数N(1<=N&l...

qq_44797278的博客 1万+

数据结构实验1.2—高精度计算PI值(西工大)

这是数据结构第二题的题目,是让我们根据用户的需求来计算派的值 这是题目的详细描述,刚看到这道题的时候,我是真的头大,完全没有思路,于是查找了一些大佬的笔记后才开始编写 这是我在写这些代码是所运用到的数学反三角函数幂次展开式的知识。 下面是正确的代码以及我的一些见解,和需要注意的一些地方。希望能对你有所帮助。如有更加精简的算法,请在评论区留下你的算法!!!谢谢!!! #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdl

abcdef0623的博客 5831

PTA--约瑟夫环(猴子选大王) 【详解】

约瑟夫环 N个人围成一圈顺序编号,从1号开始按1、2、3…顺序报数,报p者退出圈外,其余的人再从1、2、3开始报数,报p的人再退出圈外,以此类推。 请按退出顺序输出每个退出人的原序号。 输入格式: 输入只有一行,包括一个整数N(1<=N<=3000)及一个整数p(1<=p<=5000)。 输出格式: 按退出顺序输出每个退出人的原序号,数据间以一个空格分隔,但行尾无空格。 输...

zjc_include的博客 2438

硬件电路(22)-TTL和232切换电路

工作中会遇到TTL和232电平的通信的状态,为了实现一种便捷的切换方式,参考了一些文章,提供一种电路方便大家使用。

剑藏锋的博客 1868

视源CVTE嵌入式面试题及参考答案(200+面试题,17万字)

内核模块如何设置? 内核模块是可在运行时动态加载到内核或从内核卸载的代码块。以下是设置内核模块的步骤: 首先,编写内核模块代码。通常使用 C 语言编写,包含必要的头文件,如<linux/init.h>、<linux/module.h>等。在代码中,需要定义模块的初始化函数和清理函数。初始化函数在模块加载时被调用,用于进行模块的初始化工作,如注册设备、分配资源等。清理函数在模块卸载时被调用,用于释放资源、注销设备等。 例如: #include <li

大模型大数据攻城狮的专栏 2205

详细讲解C语言经典例题:有n个人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子, 问最后留下的是原来第几号的那位

C语言经典例题,有n个人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子, 问最后留下的是原来第几号的那位

wfy17030212的博客 6万+

基于江协科技STM32创建HAL库工程模板

基于江协科技STM32入门教程创建的HAL库工程模板

2401_82728381的博客 1137

循环链表实现约瑟夫环

循环链表实现约瑟夫环

m0_59763969的博客 746

从数字后端角度谈谈occ电路(一)

摘要:本文介绍了芯片测试中OCC(On-Chip Clock Control)电路的设计与应用。随着工艺进步,芯片制造面临Stuck-at、Bridging和Delay等故障类型,需要不同时钟频率进行测试。OCC电路通过Clock Selection、Clock Chopping Control和Clock Gating三个模块,实现ATE时钟与PLL时钟的切换控制,支持慢速时钟检测Stuck-at故障和快速时钟检测Delay故障。文章详细解析了OCC电路结构及各模块功能,包括同步单元、移位寄存器等关键组件

芯冰乐 586

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

循环链表 +(约瑟夫环)

for循环里面,因为每次都是报数到第四个,所以需要遍历找到删除结点的前一个结点,每次循环的时候,都将结点赋值个新创建的结点,当遍历到删除结点前一个的时候,将结点(删除结点的前一个结点)保存起来,然后通过w = w->Next将结点后移一位,此时这个结点就是要删除的,此时将r的指针域指向删除结点的下一个结点,从而跳过了删除结点,而此时结点的位置还是当前的删除结点,所以将结点后移一位(w = w->Next)。查:之前的单链表查找的时候,运用for循环,现在也是,但是问题是,循环条件得变为。......

weixin_63032791的博客 4494

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

[C & C++]利用循环链表解决约瑟夫环问题

约瑟夫环 /C /C++ /循环链表

自觉 觉他 3863

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

循环链表实现约瑟夫环问题

1、问题来源 据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从。首先从一个人开始,越过...

tan-1210的博客 2214

循环链表解决约瑟夫环问题

循环链表解决约瑟夫环问题

liu_shi_的博客 4401

数据结构之线性表——约瑟夫环问题(循环链表的应用)

1 约瑟夫环问题描述: 约瑟夫环问题是循环链表的经典应用:具体描述如下:n 个人围成一个圆圈,首先第 1 个人从 1 开始一个人一个人顺时针报数,报到第 m 个人,令其出列。然后再从下一 个人开始从 1 顺时针报数,报到第 m 个人,再令其出列,…,如此下去,求出列顺序。

ds_kuen的博客 5106

用循环链表求解约瑟夫环问题(c++实现)

前言 初学数据结构,关于循环链表,目前还在表层,特以约瑟夫环为例学习循环链表,全文仅供参考,如有不足的地方还望多多指教。 提示:以下是本篇文章正文内容,下面案例可供参考 一、约瑟夫环 据说著名犹太历史学家Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止..

qq_59187183的博客 3356

Java循环链表实现约瑟夫环

问题描述: 约瑟夫环运作如下: 1、一群人围在一起坐成[2]  环状(如:N) 2、从某个编号开始报数(如:K) 3、数到某个数(如:M)的时候,此人出列,下一个人重新报数 4、一直循环,直到所有人出列[3]  ,约瑟夫环结束 使用循环链表实现约瑟夫环是一种解法,但是效率不高。 public class yuesefu { static class Node {

wangshuang1631的博客 6011

约瑟夫环(循环链表解法)

约瑟夫环的问题大家不陌生了吧,在n个人中循环喊口号1~m,喊到m的退出,求退出次序。 首先,循环链表的类可以这么实现(已略去与本题不相关的成员函数): 如需查看完整循环链表类实现,请参考我的GitHub:循环链表完整类 //所有下标均从1开始计数 template<class T> class CircleList { protected: int n; node&lt...

Andy 1715

约瑟夫环问题(循环链表)

华为上机题,约瑟夫环,循环链表

Simple_Jan快乐的学习 2万+
上一篇: 树的同构
下一篇: 求链式表的表长
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值