升级版约瑟夫环

分数 5

作者 焦晓军

单位 重庆科技大学

又见约瑟夫环:有M个人围坐成一圈, 编号依次从1开始递增直到M,现从编号为1的人开始报数,报到N的人出列,然后再从下一人开始重新报数,报到N的人出列;重复这一过程,直至所有人出列。所有出列的人再次按出列顺序围坐成一圈,并从第1人开始报数,这次为报到K的人出队列,然后再从下一人开始重新报数,报到K的人出列;重复这一过程,直至所有人出列。求最后出列次序。题目输入包括M、N、K三个正整数;N、K可能为1。题目要求按最后出队列顺序输出他们的编号,每个测试用例结果占一行,每个编号占4位。

输入格式:

正整数 M和两个报数。

输出格式:

每个测试用例结果占一行,每个编号占4位。

输入样例:

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

10   3   5

输出样例:

在这里给出相应的输出。例如:

   7   4   1   6  10   5   3   2   8   9

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

C程序如下:

#include<stdio.h>
#include<stdlib.h>typedef struct LinkNode {int Data;struct LinkNode* Next;
}LinkNode, * LinkList;LinkList Append(int num);//构建单向循环链表
void Display(LinkList L, int times);//输出约瑟夫环
LinkList Newjosephus(LinkList old, int times);//根据第一次输出的约瑟夫环的值构建约瑟夫环int main() {LinkList first, second;int firstTimes, secondTimes, number;//firstTimes为第一次约瑟夫环报数的值,sesecondTimes为第二次,number为约瑟夫环编号的数量scanf("%d%d%d", &number, &firstTimes, &secondTimes);first = Append(number);//先构建一个数量为number的约瑟夫环second = Newjosephus(first, firstTimes);//根据第一次构建出来的约瑟夫环再次构建约瑟夫环Display(second, secondTimes);//输出最终的约瑟夫环
}LinkList Append(int num) {//构建单向循环链表,采用边构建边闭合的方式LinkList pHead, pTail;pHead = pTail = NULL;//先让头指针和尾指针都赋值为空for (int i = 1; i <= num; i++) {//循环要构建的约瑟夫环的数量次LinkList newNode = (LinkList)malloc(sizeof(LinkNode));//先创建一个新结点newNode->Data = i;newNode->Next = NULL;if (pHead == NULL) {//如果这个结点为第一个结点pHead = pTail = newNode;//让头指针和尾指针都指向该结点pHead->Next = pHead;//闭环}else {newNode->Next = pHead;//先闭环pTail->Next = newNode;//尾插法pTail = newNode;}}return pHead;//返回头指针
}void Display(LinkList L, int time) {//输出该约瑟夫环int count = 0;//计数器赋初值为0do {count++;//此时计数器的值为要开始计数的位置if (count == time - 1) {//如果计数器的值为要报数的前一个数,如要报数为3,此时count就为2LinkList pDel = L->Next;//此时要输出的结点就是该结点的下一个结点L->Next = pDel->Next;//先将要输出的结点前后链接起来printf("%4d", pDel->Data);//再输出该结点的数据free(pDel);//最后删除该结点count = 0;//count重新赋值为0,开始寻找新的报数位置}L = L->Next;//向后移动一个结点,这里无论找没找到都要向后移一个结点} while (L->Next != L);//如果只剩一个结点则退出循环printf("%4d", L->Data);//输出最后一个结点的数据
}LinkList Newjosephus(LinkList old, int times) {//根据输出约瑟夫环改造,将输出环节和删除环节改为重新添加到一个单链表当中去int count = 0;//计数器从0开始LinkList pHead, pTail;pHead = pTail = NULL;//先让头结点和尾结点都赋值为空do {//先运行再判断count++;//计数器的值为约瑟夫环开始移动的值if (count == times - 1) {//当移动到目标值的前一个值时停下来,便于删除LinkList pDel = old->Next;//记录需要删除的结点old->Next = pDel->Next;//将需要删除的结点前后链接起来LinkList newNode = (LinkList)malloc(sizeof(LinkNode));//申请一个新结点newNode->Data = pDel->Data;//newNode->Next = NULL;if (pHead == NULL) {//如果该结点为第一个结点pHead = pTail = newNode;//将头结点和尾结点都指向该结点pHead->Next = pHead;//闭环}else {newNode->Next = pHead;//先闭环pTail->Next = newNode;pTail = newNode;}free(pDel);//删除目标报数结点count = 0;//计数器重置为0}old = old->Next;//指向下一个结点} while (old->Next != old);//当单链表只剩一个结点时退出循环LinkList newNode = (LinkList)malloc(sizeof(LinkNode));//再将最后一个结点加入新链表当中去newNode->Data = old->Data;newNode->Next = NULL;newNode->Next = pHead;//先闭环pTail->Next = newNode;pTail = newNode;return pHead;//返回新链表的头结点
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/857031.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为什么Java默认使用UTF-16,Golang默认使用UTF-8呢?

Java 和 Go 语言在默认字符编码上做出了不同的选择&#xff0c;这是由它们的设计目标和使用场景决定的。下面是对 Java 默认使用 UTF-16 和 Go 默认使用 UTF-8 的原因进行的详细解释。 Java 默认使用 UTF-16 的原因 1. 历史背景和兼容性 Unicode 的发展: Java 诞生于 1995 年…

1958springboot VUE宿舍管理系统开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 springboot VUE宿舍管理系统是一套完善的完整信息管理类型系统&#xff0c;结合springboot框架和VUE完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用springboot框架&#xff08;MVC模式开发&#xff09; &#xff0c;系统具有完整的源代码和数…

PyTorch实战:模型训练中的特征图可视化技巧

1.特征图可视化&#xff0c;这种方法是最简单&#xff0c;输入一张照片&#xff0c;然后把网络中间某层的输出的特征图按通道作为图片进行可视化展示即可。 2.特征图可视化代码如下&#xff1a; def featuremap_visual(feature, out_dirNone, # 特征图保存路径文件save_feat…

MYSQL通过EXPLAIN关键字来分析SQL查询的执行计划,判断是否命中了索引

在MySQL中&#xff0c;你可以通过EXPLAIN关键字来分析SQL查询的执行计划&#xff0c;从而判断是否命中了索引。 准备查询语句&#xff1a; 首先&#xff0c;你需要一个带有WHERE子句的SELECT查询&#xff0c;因为WHERE子句中的条件通常与索引相关联。例如&#xff1a; SELECT …

O2OA的数据库数据库配置-使用不同用户访问Oracle时报错-表或视图不存在

在使用Oracle数据库时&#xff0c;多个O2OA服务器同一个Oracle实例中使用不同的用户启动时&#xff0c;可能会遇到数据库访问的错误。本篇阐述此类问题以及解决方案。 一、先决条件&#xff1a; 1、O2OA已经下载并且解压到指定的目录&#xff1b; 2、Oracle数据库已经完成安…

90 Realistic Arctic Environment Textures snow(90+种逼真的北极环境纹理--雪、冰及更多)

一组90多个逼真的雪、冰、雪地岩石和其他被雪覆盖的地面纹理,供在雪地环境中使用。每个纹理都是可贴的/无缝的,并且完全兼容各种不同的场景--标准的Unity地形、Unity标准着色器、URP、HDRP等等都兼容。 所有的纹理都是4096x4096,并包括一个HDRP掩码,以完全支持HDRP。 特点。…

X86+FPGA, NXP+FPGA:工控稳“固”之选 赋能CPCI/VPX智能轨交新变革

工业IPC在目前大时代背景下面临机遇,但挑战同样也不少。在轨道交通领域&#xff0c;工控机必须具备高可靠性和稳定性&#xff0c;能够在复杂且严苛的工作环境中长时间无故障运行&#xff1b;需要满足严格的实时性和响应性能要求&#xff0c;确保能够迅速准确地处理传感器信号和…

在 Vue 中使用 structuredClone 进行深拷贝来初始化对象内的数组

在 Vue 中使用 structuredClone 进行深拷贝来初始化对象内的数组 一、引言1.什么是深拷贝&#xff1f;2.为什么使用 structuredClone&#xff1f;3.示例代码4.详细解释5.兼容性注意事项 二、总结 一、引言 在前端开发中&#xff0c;处理复杂对象和数组时&#xff0c;深拷贝是一…

椭圆的几何要素

椭圆的几何要素 flyfish 椭圆的方程为 x 2 a 2 y 2 b 2 1 \frac{x^2}{a^2} \frac{y^2}{b^2} 1 a2x2​b2y2​1。 长半轴 a a a&#xff08;绿色虚线&#xff09;和短半轴 b b b&#xff08;紫色虚线&#xff09;。 焦点 F 1 ( − c , 0 ) F1(-c, 0) F1(−c,0)&#…

冒泡排序Java详细注释版

冒泡排序源代码&#xff0c;带有详细注释&#xff0c;希望可以帮助到大家&#xff0c;有用的话点个赞和收藏吧&#xff0c;感谢大家的阅读&#xff0c;Java小白一直在努力&#xff0c;承蒙大神们的厚爱。 定义 在程序设计语言中&#xff0c;排序算法主要有冒泡排序、快速排序、…

低代码开发:加速工业数智化转型发展

引言 在当今全球经济一体化和信息化的深度融合的大环境下&#xff0c;工业数智化转型已经成为推动制造业高质量发展的关键因素。这一转型不仅涉及生产过程的智能化、网络化&#xff0c;还涉及到企业管理、市场服务等全方位的数字化升级&#xff0c;其最终目标是为了实现更高效能…

暴雨讲堂|通往AGI的必由之路—AI agent是什么?

在三月份英伟达的新品发布会上&#xff0c;黄仁勋反复提及一个词汇— Generalist Embodied Agent&#xff0c;意为“通用具身智能体”&#xff0c;给观众留下了深刻的印象。其实具身智能指的是不同形态的拥有主动感知交互能力的机器人。其实&#xff0c;业界对它还有一个更为熟…

python如何安装ta-lib依赖包

在使用pip install ta-lib安装ta-lib库的时候,出现了以下错误信息。本文记录安装成功的整个过程。 解决办法 1、创建虚拟环境 我们使用conda进行创建一个python=3.8版本的虚拟环境 conda create -n python38 python==3.8激活创建好虚拟环境 conda activate python382、安装步…

媒体访谈 | 广告变现痛点有新解,俄罗斯市场成大热门?

今年一季度&#xff0c;中国自主研发游戏在海外市场实际销售收入达到了40.75亿美元&#xff0c;环比和同比均实现了超过5%的增长&#xff0c;出海&#xff0c;仍是游戏产品近些年来最主要的发展模式之一。 当今的市场环境正经历一系列深刻变革&#xff0c;移动游戏广告市场呈现…

python“__main__“的解读

Tutorial Gross tutorial 有些模块包含了仅供脚本使用的代码&#xff0c;比如解析命令行参数或从标准输入获取数据。 如果这样的模块被从不同的模块中导入&#xff0c;例如为了单元测试&#xff0c;脚本代码也会无意中执行。 这就是 if name ‘main’ 代码块的用武之地。除非…

IDEA集成Docker实现快捷部署

本文已收录于专栏 《运维》 目录 背景介绍优势特点操作步骤一、修改Docker配置二、配置Docker插件三、编写Maven插件四、构建Docker镜像五、创建Docker容器 总结提升 背景介绍 在我们手动通过Docker部署项目的时候&#xff0c;都是通过把打包好的jar包放到服务器上并且在服务器…

git提交遇见的<<<<<<<< HEAD无法运行程序问题

在项目文件目录下打开git bash Here 在命令行中输入 git reset --hard HEAD~1 进行复原 git reset --hard HEAD~1 即可

查找程序中隐藏界面的思路

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动 某些程序&#xff0c;它会有管理员界面&#xff08;比如棋牌游戏&#xff0c;它一般会有一个控制端界面&#xff0c;用来控制发牌、换牌&#xff09;&#xff0c;但是这种界…

【Java】线程池技术(三)ThreadPoolExecutor 状态与运行源码解析

ThreadPoolExecutor 状态 ThreadPoolExecutor 继承了 AbstractExecutorService&#xff0c;并实现了 ExecutorService 接口&#xff0c;用于管理线程。内部使用了原子整型 AtomicInteger ctl 来表示线程池状态和 Worker 数量。前 3 位表示线程池状态&#xff0c;后 29 位表示 …

python代码生成可执行文件

以下面转换图片尺寸的代码resize_images.py为例&#xff1a; 代码功能&#xff1a;原始图片放在img文件夹中&#xff0c;然后运行代码可以转换成指定分辨率&#xff0c;保存在同一目录下的新生成的文件夹中 import os import sys import cv2 from datetime import datetime f…