数据结构课程设计选做(三)---公共钥匙盒(线性表,栈,队列)

2.3.1 题目内容
2.3.1-A [问题描述]

有一个学校的老师共用N个教室,按照规定,所有的钥匙都必须放在公共钥匙盒里,老师不能带钥匙回家。每次老师上课前,都从公共钥匙盒里找到自己上课的教室的钥匙去开门,上完课后,再将钥匙放回到钥匙盒中。

钥匙盒一共有N个挂钩,从左到右排成一排,用来挂N个教室的钥匙。一串钥匙没有固定的悬挂位置,但钥匙上有标识,所以老师们不会弄混钥匙。

每次取钥匙的时候,老师们都会找到自己所需要的钥匙将其取走,而不会移动其他钥匙。每次还钥匙的时候,还钥匙的老师会找到最左边的空的挂钩,将钥匙挂在这个挂钩上。如果有多位老师还钥匙,则他们按钥匙编号从小到大的顺序还。如果同一时刻既有老师还钥匙又有老师取钥匙,则老师们会先将钥匙全还回去再取出。

今天开始的时候钥匙是按编号从小到大的顺序放在钥匙盒里的。有K位老师要上课,给出每位老师所需要的钥匙、开始上课的时间和上课的时长,假设下课时间就是还钥匙时间,请问最终钥匙盒里面钥匙的顺序是怎样的?

2.3.1-B [基本要求]

(1)输入格式

输入的第一行包含两个整数N, K。

接下来K行,每行三个整数w, s, c,分别表示一位老师要使用的钥匙编号、开始

课的时间和上课的时长。可能有多位老师使用同一把钥匙,但是老师使用钥匙的时间

不会重叠。

保证输入数据满足输入格式,你不用检查数据合法性。

2)输出格式

输出一行,包含N个整数,相邻整数间用一个空格分隔,依次表示每个挂钩上挂的

钥匙编号。

样例输入

5 2

4 3 3

2 2 7

样例输出

1 4 3 2 5

样例说明

  第一位老师从时刻3开始使用4号教室的钥匙,使用3单位时间,所以在时刻6还钥匙。第二位老师从时刻2开始使用钥匙,使用7单位时间,所以在时刻9还钥匙。

  每个关键时刻后的钥匙状态如下(X表示空):

  时刻2后为1X345;

  时刻3后为1X3X5;

  时刻6后为143X5;

  时刻9后为14325。

课程设计要求:

(1)要求从文本文件中输入;

(2)根据时间进程,将取走钥匙和归还钥匙分别视为事件,放入队列中,然后通过每个事件的先后发生对钥匙盒的状态进行变更;

(3)严格按照要求的输入输出格式进行数据的输入、输出(训练CSP考试中的格式化输入输出的正确性);

(4)选做:通过图形界面来显示钥匙盒的即时状态,以及事件队列的状态。

2.3.2 算法思想

定义了一个结构体 Node,用于存储借还钥匙的信息,包括钥匙编号、时间和借还标识。

自定义了一个比较函数 cmp,用于对借还钥匙的信息进行排序。排序的规则是首先按时间早的优先,然后是还钥匙优先,最后是编号小的优先。从文件中读取钥匙盒大小 N 和操作次数 K。

初始化了一个数组 num,用于存储钥匙盒中的钥匙情况,下标表示钥匙位置,值表示钥匙编号。通过循环,读取每次操作的借还钥匙信息,并将这些信息存储在结构体数组 node 中,同时对应的操作次数进行递减。对存储的借还钥匙信息进行排序,排序规则使用了自定义的比较函数 cmp。遍历排序后的借还钥匙信息,根据借还标识将钥匙放入或取出钥匙盒中的对应位置。最后输出最终的钥匙盒情况。

2.3.3 源代码 [共87]
#include<iostream>
#include<algorithm>
#include<fstream>
using namespace std;int num[1005]; // 用于存储钥匙盒中的钥匙情况,下标表示钥匙位置,值表示钥匙编号struct Node
{int key; // 钥匙编号int time; // 时间int sign; // 借还标识,借为0,还为1
} node[20002]; // 存储借还钥匙的信息// 自定义比较函数,用于排序
bool cmp(Node a, Node b)
{if(a.time != b.time)return a.time < b.time; // 时间早的优先else{if(a.sign != b.sign) return a.sign > b.sign; // 还优先else return a.key < b.key; // 编号小优先}
}int main()
{ifstream a;a.open("data.txt",ios::in);if(a.eof()){cout<<"打开文件失败!"<<endl;a.close();exit(0);}int N, K;a>> N >> K; // 输入钥匙盒大小和操作次数for(int i = 1; i <= N; i++) num[i] = i; // 初始化钥匙盒int n = 0;while(K--){int w,s,c;//cin >> w >> s >> c; // 输入借还钥匙的信息a>>w>>s>>c;// 存储借钥匙的信息node[n].key = w;node[n].time = s;node[n++].sign = 0;//0代表借 // 存储还钥匙的信息node[n].key = w;node[n].time = s + c;node[n++].sign = 1;//1代表还 }sort(node, node + n, cmp); // 对借还钥匙的信息进行排序for(int i = 0; i < n; i++){if(node[i].sign){ // 还钥匙for(int j = 1; j <= N; j++){if(!num[j]){num[j] = node[i].key; // 找到空位,放入还的钥匙break;}    }   }else{ // 借钥匙for(int j = 1; j <= N; j++){if(num[j] == node[i].key)num[j] = 0; // 找到对应的钥匙,置为空位}   } }for(int i = 1; i <= N; i++)cout << num[i] << " "; // 输出最终的钥匙盒情况a.close();return 0;
}
2.3.4 测试数据与运行结果
2.3.4-A 测试数据

2.3.4-B 运行结果

源码地址:GeekclubC/Course-Design-of-Data-Structure: 用C++完成的数据结构课程设计 (github.com)

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

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

相关文章

pycharm debug 的时候 waiting for process detach

当你使用pycharm debug或者run的时候&#xff0c;突然出现了点不动&#xff0c;然后一直显示&#xff1a;waiting for process detach 可能是以下问题&#xff1a; 1、需要设置Gevent compatible pycharm一直没显示运行步骤&#xff0c;只是出现waiting for process detach-C…

利用Sentinel解决雪崩问题(一)流量控制

1、解决雪崩问题的常见方式有四种: 超时处理:设定超时时间&#xff0c;请求超过一定时间没有响应就返回错误信息&#xff0c;不会无休止等待;舱壁模式:限定每个业务能使用的线程数&#xff0c;避免耗尽整个tomcat的资源&#xff0c;因此也叫线程隔离;熔断降级:由断路器统计业务…

demo(四)nacosgateway(2)gatewayspringsercurity

一、思路 1、整体思路 用户通过客户端访问项目时&#xff0c;前端项目会部署在nginx上&#xff0c;加载静态文件时直接从nginx上返回即可。当用户在客户端操作时&#xff0c;需要调用后端的一些服务接口。这些接口会通过Gateway网关&#xff0c;网关进行一定的处理&#xff0…

Thingsboard PE 白标的使用

只有专业版支持白标功能。 使用 ThingsBoard Cloud 或安装您自己的平台实例。 一、介绍 ThingsBoard Web 界面提供了简便的操作,让您能够轻松配置您的公司或产品标识和配色方案,无需进行编码工作或重新启动服务。 系统管理员、租户和客户管理员可以根据需要自定义配色方案、…

精通技术写作:如何写出高质量技术文章?

CSDN 的朋友你们好&#xff0c;我是未来&#xff0c;今天给大家带来专栏【程序员博主教程&#xff08;完全指南&#xff09;】的第 7 篇文章“如何撰写高质量技术文章”。本文深入探讨了如何写好一篇技术文章。文章给出了好的技术文章的定义和分析&#xff0c;并提供了从选题、…

Day103:漏洞发现-漏扫项目篇Poc开发Rule语法反链判断不回显检测Yaml生成

目录 Xray&Afrog-Poc开发-环境配置&编写流程 Xray-Poc开发-数据回显&RCE不回显&实验室 Afrog-Poc开发-数据回显&RCE不回显&JDNI注入 HTTP/S数据回显Poc开发-CVE-2023-28432 HTTP/S不回显RCE-Poc开发-CVE-2022-30525 HTTP/S不回显JNDI-Poc开发 知…

Upload-labs(Pass-14 - Pass-16)

Pass-14 &#xff08;图片马&#xff0c;判断文件类型&#xff09; 图片的格式在防护中通常是不会使用后缀进行判断的依据&#xff0c;文件头是文件开头的一段二进制码&#xff0c;不同类型的图片也就会有不同的二进制头。   JPEG (jpg)&#xff0c;文件头&#xff1a;FF D…

便携式污水采样器的工作环境要求

便携式污水采样器的工作环境要求极为严格&#xff0c;以确保其能够准确、稳定地采集和分析水样。首先&#xff0c;该采样器必须在干燥、通风良好的环境中工作&#xff0c;以避免潮湿和高温对其内部电子元件的损害。同时&#xff0c;为了保证采样器的稳定性和精度&#xff0c;工…

【数据结构(六)】队列

❣博主主页: 33的博客❣ ▶️文章专栏分类:数据结构◀️ &#x1f69a;我的代码仓库: 33的代码仓库&#x1f69a; &#x1faf5;&#x1faf5;&#x1faf5;关注我带你学更多数据结构知识 目录 1.前言2.概念3.队列的使用4.循环队列5.双端队列6.经典习题6.1队列实现栈6.2栈实现队…

一款挺不错网站维护页面HTML源码

一款挺不错网站维护页面源码&#xff0c;单HTML不需要数据库&#xff0c;上传到你的虚拟机就可以用做维护页面还不错&#xff0c;用处多。。 源码下载 一款挺不错网站维护页面源码

LangChain LangServe 学习笔记

LangChain LangServe 学习笔记 0. 引言1. LangServe 概述2. 特性3. 限制4. 安装5. 示例应用程序6. OpenAPI文档7. Python SDK 客户端8. Playground9. 聊天可运行页面 0. 引言 使用 LangServe 可以立即将您的LLM应用程序变成 API 服务器。 LangServe 使用 FastAPI 构建&#x…

three.js(1):three.js简介

1 什么是three.js three.js&#xff0c;一个WebGL引擎&#xff0c;基于JavaScript&#xff0c;可直接运行GPU驱动游戏与图形驱动应用于浏览器。其库提供的特性与API以绘制3D场景于浏览器。 2 下载地址 three.js下载地址:https://github.com/mrdoob/three.js 3 目录介绍 下载…

【题目】【信息安全管理与评估】2022年国赛高职组“信息安全管理与评估”赛项样题5

【题目】【信息安全管理与评估】2022年国赛高职组“信息安全管理与评估”赛项样题5 第一阶段竞赛项目试题 本文件为信息安全管理与评估项目竞赛-第一阶段试题&#xff0c;第一阶段内容包括&#xff1a;网络平台搭建与设备安全防护。 本次比赛时间为180分钟。 介绍 竞赛阶段…

浅谈函数 fscanf/sscanf 和 fprintf/sprintf

目录 一&#xff0c;fprintf 的介绍和使用1. 函数介绍2. 函数使用 二&#xff0c;fscanf 的介绍和使用1. 函数介绍2. 函数使用 三&#xff0c;sprintf 的介绍和使用1. 函数介绍2. 函数使用 四&#xff0c;sscanf 的介绍和使用1&#xff0c;函数介绍2&#xff0c;函数使用 五&am…

SSL Pinning之双向认证

双向认证处理流程 概述获取证书逆向app 获取证书的KeyStore的 key通过jadx 反编译 app 获取证书&#xff1a;frida hook 证书转换命令行转换portecle 工具使用 charles 配置 p12 格式证书 概述 本篇只介绍怎么解决ssl pinning&#xff0c; 不讲ssl/tls 原理。 为了解决ssl pinn…

RT-Thread 多级目录 scons 构建

前言 RT-Thread 默认使用 scons 进行工程的构建&#xff0c;虽然 RT-Thread BSP 中的 hello world 例程比较简单&#xff0c;实际项目开发&#xff0c;可能源码的工程会由多级目录&#xff0c;如何让多级的目录参与构建&#xff1f; scons 构建时&#xff0c;除了依赖工程的根…

基于R语言实现的beta二项回归模型【理解与实现】

本实验&#xff0c;创建一组使用二项分布模拟的数据&#xff08;不带额外的随机性&#xff09;&#xff0c;和另一组使用Beta二项分布模拟的数据&#xff08;引入了随机成功概率 p&#xff0c;从而增加了数据的离散性。 现在假设我们站在上帝视角&#xff0c;有两组不知道分布…

Qt 中默认代码

目录 主函数 widget的声明 widget的定义 form file .pro 文件 主函数 #include "widget.h" ​ #include <QApplication> ​ int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 上面就是 Qt 刚创建的一…

机器学习-随机森林温度预测模型优化

文章目录 前言旧模型训练新模型训练参数查看组合参数训练学习模型评估 前言 在机器学习-随机森林算法预测温度一文中&#xff0c;通过增大模型训练数据集和训练特征的方式去优化模型的性能&#xff0c;本文将记录第三方种优化方式&#xff0c;通过调整随机森林创建模型参数的方…

【高阶数据结构】哈希表 {哈希函数和哈希冲突;哈希冲突的解决方案:闭散列,开散列;红黑树结构 VS 哈希结构}

一、哈希表的概念 顺序结构以及平衡树 顺序结构以及平衡树中&#xff0c;元素关键码与其存储位置之间没有对应的关系。因此在查找一个元素时&#xff0c;必须要经过关键码的多次比较。顺序查找时间复杂度为O(N)&#xff1b;平衡树中为树的高度&#xff0c;即O(log_2 N)&#xf…