约瑟夫环(数据结构小实验二)

杭电数据结构课程实践-约瑟夫环 约瑟夫环需求分析概要设计详细设计调试分析测试数据及用户手册附录 需求分析   约瑟夫环问题的一种描述是:编号为1,2,3,……,n的n个人按顺时针方向围坐一圈,每个人持有一个密码(正整数),一开始任选一个正整数作为报数值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数,报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止,试设计一个程序求出出列顺序。 【设计要求】 (1)采用双向循环链表存储结构,描述线性表的抽象数据类型。 (2 阅读详情

题目二:约瑟夫环(**)

[问题描述]

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

[基本要求]

利用单向循环链表存储结构模拟此过程,按照出列的顺序印出各人的编号。

[测试数据]

由学生任意指定。
  如:m的初值为20;n的值为7;密码:3,1,7,2,4,8,4;
(正确的输出结果应为6,1,4,7,2,3,5)。
(报告上要求写出多批数据测试结果)

[实现提示]

程序运行后首先要求用户输入初始报数上限值m,人数n,(设n≤30)。然后输入各人的密码。

[选作内容]

向上述程序中添加在顺序结构上实现的部分。

#include<iostream>
#include<malloc.h>
using namespace std;
struct node{
	int data,num;
	node* next;
};
int main()
{
	int n,m,k;
	while(~scanf("%d%d",&m,&n))
	{	
		node* head=(node*)malloc(sizeof(node));
		node *rear=head;
		head->next=NULL;
		head->num=1;
		scanf("%d",&head->data); 
		for(int i=2;i<=n;i++){
			scanf("%d",&k);
			node* p=(node*)malloc(sizeof(node));
			p->data=k;
			p->num=i;
			rear->next=p;
			rear=p;
		}
		rear->next=head;
		node *p=rear;
		while(n--){
			m=(m+n)%(n+1); 
			while(m--)	p=p->next;
			printf("%d ",p->next->num);
			m=p->next->data;
			node* temp=p->next;
			p->next=p->next->next;
			free(temp);
		}
	}
	return 0;
}

实现中出现的一些小问题

实现也并不是特别的麻烦,但是头结点我懒得简化掉(之前一直想着连成环),后来一想,可以直接用头结点存编号1就好了,有点麻烦的是第一次数数和其他时刻不一样,所以必须要从rear开始查。其次考虑到算法的效率,大于人数上限的直接公式求解,注意到m-1=(m+n-1)%n与n- -,所以以公式m=(m+n)%(n+1)简化操作。考虑到的内存问题,特设置temp进行使用过的释放。

数据结构实验第二章 综合性实验(满分 100) 约瑟夫环问题 (1)问题描述 设有编号为 1,2,…,n 的 n(n>0)个人围成一个圈,每个人持有一个密码 m。 从第一个人开始报数,报到 m 时停止报数,报 m 的人出圈,再从他的下一个人 起重新报数,报到 m 时停止报数,报 m 的出圈,……,如此下去,直到所有人 全部出圈为止。当任意给定 n 和 m 后,设计算法求 n 个人出圈的次序。 (2)基本要求 ... 阅读详情

相关推荐

数据结构 约瑟夫环

设编号为1,2,…,n(n>0)个人按顺时针方向围坐一圈,每人持有一个正整数密码。开始时任意给出一个报数上限m,从第一个人开始顺时针方向自1起顺序报数,报到m时停止报数,报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人起重新自1报数;如此下去直到所有人全部出列为止。

hdu仓库 4104

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

问题描述: 约瑟夫问题的一种描述是:编号为1,2,3~n的n个人按顺时针方向围坐一圈,没人持有一个密码(正整数),开始时任选一个整数作为报数上限值m, 从第一个人开始顺时针自1开始数序报数,报道m时停止报数。报m的人出列,将他的密码作为新的m值,从他顺时针的方向上下一个人开始重新从1报数,如此下去,直至所有的人全部出列为止。设计一个程序,求出出列顺序。 利用单向循环列表作为存储结构模拟过程,按照出列顺序打印出个人的编号。 例如:m的初始值为20,n=7,7个人的密码分别是3,1,7,2,4,8,4,出列的顺

qq_54001733的博客 2789

数据结构--约瑟夫环问题

题目描述 约瑟夫环来源 首先,我们先来了解一下什么是约瑟夫环问题: 讲一个比较有意思的故事:约瑟夫是犹太军队的一个将军,在反抗罗马的起义中,他所率领的军队被击溃,只剩下残余的部队40余人,他们都是宁死不屈的人,所以不愿投降做叛徒。一群人表决说要死,所以用一种策略来先后kill所有人。 于是约瑟夫建议:每次由其他两人一起kill一个人,而被kill的人的先后顺序是由抽签决定的,约瑟夫有预谋地抽到了最后一签,在kill了除了他和剩余那个人之外的最后一人,他劝服了另外一个没死的人投降了罗马。 题目如下: 约瑟夫环

qq_45716514的博客 1万+

数据结构实验——约瑟夫环

问题描述 约瑟夫(Joseph)问题的一种描述是:编号为1,2,…,n的n个人按顺时针方向围坐一圈。任选一个正整数作为报数上限值m,从第k个人开始按顺时针方向自1开始顺序报数,报到m时停止报数,报m的人出列,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。试设计一个程序求出出列顺序。 利用单向循环链表存储结构模拟此过程,按照出列的顺序印出各人的编号。 实验方案 (一)算法设计思路: 先创建一个含有n个结点(不带头结点)的单循环链表,然后由第一个结点起从1开始计数(此

Anffen的博客 7521

数据结构之约瑟夫环

先来聊聊什么是约瑟夫环,有编号为1,2,3...n个小朋友围成一圈坐,让编号为k[1,n]的下朋友开始从1报数,数到m的那个小朋友出圈,下一个小朋友接着从1开始报数,数到m的小朋友继续出圈,循环执行此操作,直至圈中所有小朋友都出圈,由此得到的出圈编号。 这里我用单向环形链表来实现约瑟夫环,在添加每个节点时,让新加入的节点的next域指向第一个节点first。下图是一个单向环形链表。 由于单链表不能实现自我删除,所以我们需要一个helper指针指向待删除节点的前一个节点。假设从第一个节点开始,firs

mly15191882818的博客 1801

【数据结构】C++代码实现 约瑟夫环

【数据结构】C++代码实现 约瑟夫环 我的第一篇博客,也不知道怎么说,实验课留的题目,直接上代码 Josephus环问题 问题描述: 约瑟夫(Joseph)问题的一种描述是:编号为1,2,…,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。试设计一个程序求出出列顺序。 基本要求:

Juvenile_chi的博客 6100

约瑟夫环实现实验报告(完成代码+实验截图)

约瑟夫环手打实现,十分有趣

m0_62645012的博客 6626

ADS1220 STM32硬件SPI驱动程序

前一段时间温故了下标准库,使用的是F1系列芯片,测试程序。

随风飘零翼的博客 5767

C语言数据结构篇——约瑟夫环的实现

大一新生自学中,有不完善的地方希望大家见谅,有什么好的改进想法欢迎提出来一起交流,感谢大家的阅读。 目录 什么是约瑟夫环 约瑟夫环的实现方式 循环链表的构建 循环链表在约瑟夫问题上的应用 完整代码 什么是约瑟夫环 约瑟夫环是循环链表的一个典型应用,其描述如下:m个人围成一圈,从任意一个人开始,按顺时针顺序使所有人依次从1开始报数,报到n的人出列,然后使n之后的人接着从1开始报数,再次使报到n的人出列,不断重复此操作,并输出出局的先后顺序,直到最后只剩下一个人,如下示意图所示 ...

Demo不是emo的博客 2万+

解密网页视频Blob链接:从防盗链到流媒体分片技术

本文深入解析了网页视频中Blob链接的工作原理,揭示了其作为现代视频防盗链与流媒体分片技术核心的本质。文章详细阐述了Blob对象与Media Source API如何协同工作,将视频数据分片传输,并结合HTML5的video元素实现安全、流畅的播放体验,有效提升了资源保护能力。

c7d8e的博客 317

Auto.js凉了之后,我们该用啥?AutoX.js保姆级环境搭建与第一个脚本实战(2024最新)

本文详细介绍了AutoX.js作为Auto.js替代方案的环境搭建与脚本开发实战指南。从技术生态现状分析到2024最新环境配置,再到编写第一个实用脚本和进阶调试技巧,帮助开发者无缝迁移至AutoX.js平台。特别适合需要手机自动化的JavaScript开发者,涵盖从基础到企业级应用的全套解决方案。

weixin_28737073的博客 389

数据结构:约瑟夫环

约瑟夫环原理运作如下: N个人围在一起坐成环状 从K编号开始报数 数到某个数M的时候,此人出列,下一个人重新报数 一直循环,直到所有人出列,约瑟夫环结束 joselooplink.c(编译环境: Ubuntu18.04 ,Vim) #include <stdio.h> #include <stdlib.h> typedef struct node ...

不秃头的程序猿Gabriel的博客 1万+

基于boot + 双app升级方案

基于boot+双app的升级方案

weixin_44654285的博客 4515

约瑟夫环问题

一、问题描述 约瑟夫环问题是一个很经典的问题:一个圈共有N个人(N为不确定的数字),第一个人的编号为0或者1(两个都可以,看你的程序如何编写),假设这边我将第一个人的编号设置为1号,那么第二个人的编号就为2号,第三个人的编号就为3号,第N个人的编号就为N号,现在提供一个数字M,第一个人开始从1报数,第二个人报的数就是2,依次类推,报到M这个数字的人出局,紧接着从出局的这个人的下一个人重新开始从1报数,和上面过程类似,报到M的人出局,直到N个人全部出局,请问,这个出局的顺序是什么? 举一个简单的例子:假.

xiaoxi_hahaha的博客 11万+

配置oem 13c以监控管理数据库

使用oem13c监控数据库

雅冰石的专栏 1809

Oracle11g下载与安装(windows)

一、Oracle11g下载 二、安装准备 三、执行安装步骤 四、测试连接 附:Oracle11g服务说明

欢迎订阅我的“JAVA全栈开发笔记(全)”专栏,价格优惠,仅需19.9元。 2万+

数据结构C语言实现约瑟夫环

(数据结构约瑟夫环) C语言实现约瑟夫环 题目背景 编号为1,2,…,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。现在给定一个随机数m>0,从编号为1的人开始,按顺时针方向1开始顺序报数,报到m时停止。报m的人出圈,同时留下他的密码作为新的m值,从他在顺时针方向上的下一个人开始,重新从1开始报数,如此下去,直至所有的人全部出列为止。 代码如下 #include<stdio.h> #include<stdlib.h> #include<string.h&gt

monster_131的博客 7705

解决Gradle中NPM命令失效问题

摘要:本文分析了IntelliJ IDEA中Gradle执行npm命令失败的问题,报错显示"npm"文件不存在。通过确认npm安装路径、检查系统PATH与Gradle环境的差异,提出两种解决方案:1) 在build.gradle中使用npm绝对路径;2) 通过launchctl修改用户PATH。实例展示了如何修改Gradle脚本或系统配置来解决该问题,指出跨平台开发中环境变量配置的重要性。文章为开发者提供了处理类似问题的实用方法。

2501_90323865的博客 90

数据结构与算法——约瑟夫环

p=p->next;此时就已经找到了报数位m的人对应的结点以及他对应的前驱结点,让r指向p(准备释放结点p),输出p->info,让p=p->next,这时能够输出第一个出列的人,但为了后面继续查找(报数)并输出下一个出列的人,还得判断p、q两指针的位置并修改它们的指向:若p->next=NULL(即p为表尾),则head->next=p;2.开始报数直至m,此时找到了要出列的人对应的结点以及他的前驱结点,让p出列(输出p->info),让r指向p,准备释放,p、q仍然不为表尾,所以p=p->next;

icc_hhy的博客 8886

【新能源汽车测试工程师必看!DBC文件50条实战技巧,看懂这篇直接封神】

如果你是新能源汽车研发/测试工程师,还在为信号解析错误、报文找不到、DBC看不懂、实车故障复现不了头疼——那这篇文章,你一定要!在整车电控开发里,DBC = CAN总线的官方字典。没有DBC,报文就是一串乱码;读不懂DBC,测试寸步难行;用不好DBC,排查故障全靠猜。本文总结50条全网最实用、最贴近实车、最能解决问题的DBC技巧,从基础语法到新能源专用信号,从工具操作到故障排错,全部来自一线台架、实车、高压平台实战经验。不废话、不空谈、不玄学,全是能直接落地的硬货!

优快云-新能源汽车研发测试专业博主 1369

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

数据结构约瑟夫环实验报告

实验目的及要求 目的:能够熟练掌握线性表的基本操作在顺序和链式两种存储结构上的实现,进一步理解线性表的逻辑结构和存储结构,提高使用理论知识指导解决实际问题的能力。 要求:1.建立数据模型,确定存储结构; 2.对任意人数、密码,都能实现约瑟夫环问题; 3.出圈顺序可以依次输出,也可以用一个数组输出。 实验步骤 1.实验问题分析 (1)由于当某个人退出圆圈后,报数的工作要从下一个人继续,剩下的人仍要围成一个圆圈,这个问题具有循环性质,考虑使用循环链表; 由于退出圆圈的这个指令对应着结点的删除操

mariodf的博客 7277

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

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

数据结构课程设计--约瑟夫环问题

约瑟夫环问题(你的点赞是我创作的动力) 如果想看完整版的实验报告,我上传了资源,下面内容只是实验报告的精华。 希望各位看完能顺手给我个赞,万分感谢😁帮你也帮我

2301_81688786的博客 2892

STM32F407中文手册

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

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

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

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

ds_kuen的博客 5106

数据结构_约瑟夫环问题

终于终于终于学会线性表了!!! 这时候应该趁热打铁做一道题试试!!! oj上有一道约瑟夫环问题: 描述 约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。 输入 8 1 3 (n=8 k=1 m=3 ) 输出 7 (剩下...

AMWICD的博客 2828

(数据结构)约瑟夫环问题——C语言实现

文章目录前言问题描述代码总结 前言 学习记录《数据结构——从概念到C实现》 part 3:约瑟夫环问题 问题描述 约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为1的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。 本篇介绍当给定任意n和m后,求n个人出环的次序。 代码 #include <stdio.h> #include <malloc.h> t

ZhangChengZi__的博客 1万+

《数据结构》经典问题-约瑟夫环

你应该站在哪个位置,才能活到最后?_哔哩哔哩_bilibili据说在罗马帝国时期,一群犹太士兵被罗马人包围。,至今无解的移沙发问题。,100个数学家如何集体越狱?,怎样赢得石头剪子布?什么是随机?,无限巧克力悖论,最热能有多少度?,对数幻觉,摆烂的最好理由?有趣的四帽逻辑难题,用不知道来解决问题|puzzle、烧脑难题、逻辑思维,怎样解释祖父悖论?,毒药谜题,用最短时间最小代价,找出隐藏的毒药t=0.2t=P4F5你应该站在哪个位置,才能活到最后?

lidinghu的博客 1301
上一篇: 奇特的艺术品(数据结构小实验)
下一篇: POJ1363 Rails(数据结构小实验)
whilefail
博客等级 码龄8年 10粉丝 12原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值