日常记录:天梯赛练习集L1-043 阅览室

news2025/1/23 17:51:13

 题目:

天梯图书阅览室请你编写一个简单的图书借阅统计程序。当读者借书时,管理员输入书号并按下S键,程序开始计时;当读者还书时,管理员输入书号并按下E键,程序结束计时。书号为不超过1000的正整数。当管理员将0作为书号输入时,表示一天工作结束,你的程序应输出当天的读者借书次数和平均阅读时间。

注意:由于线路偶尔会有故障,可能出现不完整的纪录,即只有S没有E,或者只有E没有S的纪录,系统应能自动忽略这种无效纪录。另外,题目保证书号是书的唯一标识,同一本书在任何时间区间内只可能被一位读者借阅。

输入格式:

输入在第一行给出一个正整数N(≤10),随后给出N天的纪录。每天的纪录由若干次借阅操作组成,每次操作占一行,格式为:

书号([1, 1000]内的整数) 键值SE) 发生时间hh:mm,其中hh是[0,23]内的整数,mm是[0, 59]内整数)

每一天的纪录保证按时间递增的顺序给出。

输出格式:

对每天的纪录,在一行中输出当天的读者借书次数和平均阅读时间(以分钟为单位的精确到个位的整数时间)。

输入样例:

3
1 S 08:10
2 S 08:35
1 E 10:00
2 E 13:16
0 S 17:00
0 S 17:00
3 E 08:10
1 S 08:20
2 S 09:00
1 E 09:20
0 E 17:00

输出样例:

2 196
0 0
1 60

 解答:

题目分析:

  • 需统计每天有效借书次数和平均借阅时间
  • 有效借书为有借有还
  • 书号范围为[1,1000]
  • 书号为0时表示图书馆下班,此时应统计当天数据
  • 需自动忽略不完整记录
  • 计算平均借阅时间时以分钟为单位,且需要四舍五入
  • 计算借阅时间时,只需要将有效借阅时间的小时之差乘以60再加上分钟之差即可

题目理解:

  •  连续多次借书,以最后一次借为准,连续多次还书,以第一次还为准

 操作实现:

  1. 定义BOOK结构体,内含开始结束时的时间hour、min和当前借阅状态state,同时定义N为1010,表示最多有1000本书,多开辟的空间防止数组越界
  2. 定义Time函数,计算一本书有效借阅时长
  3. 定义n表示统计n天借阅情况,即输出n行
  4. 利用for循环循环n次,内定义有效借阅次数count和当天借阅总时长time
  5. 利用while循环实现统计当天所有借阅归还记录,当num为0时表示当天图书馆已下班,退出while循环
  6. 退出while循环后,需计算并输出当日有效借阅次数和平均借阅时长

小贴士:

  • 为防止在读入flag时读入空格键,可以每次输入用scanf读入一整行的数据,规范化输入
  • 计算平均借阅时长时,若count==0,则会出现除零异常,需使用if-else语句输出count==0时的情况
  • 四舍五入算法可以先将整数除法转化为浮点数除法,将结果加上0.5,再强转为整型,从而达到四舍五入的效果

代码实现:

#include <iostream>
#include <cstdio>
using namespace std;

const int N = 1010;	//定义BOOK数组长度

int Time(int bhour, int bmin, int ehour, int emin);	//声明时间统计函数

typedef struct
{
	int hour;	//借阅开始小时
	int min;	//借阅开始分钟
	char state = 'E';	//设置初始状态为归还状态
}BOOK;

int main()
{
	int n; cin >> n;	//n天
	BOOK book[N];	//定义BOOK数组
	for (int i = 0; i < n; i++)	//统计n天内数据
	{
		int num;	//书号
		char flag;	//借阅状态
		int hour, min;	//当前小时和分钟

		int count = 0;	//当天有效借阅次数
		int time = 0;	//当天有效借阅时长
		scanf("%d %c %d:%d", &num, &flag, &hour, &min);	//输入借阅记录
		while (num)	//当num为0时表示下班,退出循环
		{
			if (flag == 'S' && book[num].state == 'E')	//有效借阅
			{
				book[num].hour = hour;	//更新借阅时间
				book[num].min = min;	//更新借阅时间
				book[num].state = flag;	//更新借阅状态
			}
			else if (flag == 'E' && book[num].state == 'S')	//有效归还
			{
				time += Time(book[num].hour, book[num].min, hour, min);	//计算本次借书时长
				count++;	//有效借阅次数加一
				book[num].state = flag;	//更新借阅状态
			}
			else if (flag == 'S' && book[num].state == 'S')	//无效借阅
			{
				book[num].hour = hour;	//更新借阅时间,保留最后一次借阅时间
				book[num].min = min;	//更新借阅时间,保留最后一次借阅时间
			}
			else if (flag == 'E' && book[num].state == 'E');//无效归还,不做处理
			scanf("%d %c %d:%d", &num, &flag, &hour, &min);	//输入下一条借阅记录
		}
		if (count) printf("%d %d\n", count, int(time*1.0 / count + 0.5));	//若count不为0,则计算后输出统计结果
		else printf("0 0\n");	//若count为0,则输出0 0
	}
	return 0;
}

//定义时间统计函数,参数为借阅时的小时和分钟,归还时的小时和分钟
int Time(int bhour, int bmin, int ehour, int emin)
{
	return ((ehour - bhour) * 60 + (emin - bmin));	//返回借阅借阅时长
}

PTA题目地址 

欢迎大家探讨

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

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

相关文章

信安大佬真的用kali吗?

Kali只是现在网络安全和kali比较火的一个操作系统 下面我为大家讲讲kali系统都有那些优点 Kali介绍Kali Linux是基于Debian的Linux发行版&#xff0c; 设计用于数字取证操作系统。面向专业的渗透测试和安全审计。 集成化&#xff1a;预装超过300个渗透测试工具兼容好&#x…

【你听说了吗】GPT-5据说已经学完了世界上现存所有的视频

文章目录前言一、GPT-5会带来什么&#xff1f;二、我们该怎么办&#xff1f;总结前言 最近半年要说最火的产品&#xff0c;无疑是ChatGPT &#xff0c;很多同学都在用 GPT 帮助自己工作&#xff0c;学习&#xff0c;提高效率&#xff01;尤其是 GPT4&#xff0c;性能强 GPT3.5…

鸟哥的Linux私房菜 学习 Shell Scripts

第十三章、学习 Shell Scripts 重点回顾 shell script 是利用 shell 的功能所写的一个『程序 (program)』&#xff0c;这个程序是使用纯文字档&#xff0c;将一些 shell 的语法与命令(含外部命令)写在里面&#xff0c; 搭配正规表示法、管线命令与数据流重导向等功能&#xf…

代码随想录算法训练营第五十三天 | 1143.最长公共子序列、1035.不相交的线、 53. 最大子序和 动态规划

打卡第53天 今日任务 1143.最长公共子序列 1035.不相交的线 53.最大子序和 动态规划 1143.最长公共子序列 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 &#xff0c;返回 0 。 一个字符串的 子序列 是指这…

i.MX6ULL 开发板-Mqtt 移植

转载&#xff1a;http://e.betheme.net/article/show-149636.html?actiononClick PS&#xff1a; 订阅主题&#xff0c;命令如下&#xff1a; mosquitto_sub -h localhost -t "mqtt" -v 发布主题&#xff0c;命令如下&#xff1a; mosquitto_pub -h localhost -…

96年阿里P7晒出工资单:狠补了这个,真香...

最近一哥们跟我聊天装逼&#xff0c;说他最近从阿里跳槽了&#xff0c;我问他跳出来拿了多少&#xff1f;哥们表示很得意&#xff0c;说跳槽到新公司一个月后发了工资&#xff0c;月入5万多&#xff0c;表示很满足&#xff01;这样的高薪资着实让人羡慕&#xff0c;我猜这是税后…

使用qt调用c#编写的dll库

问题背景 我需要使用qt编写界面程序来操作设备&#xff0c;设备厂家提供了一个使用C#编写的dll库&#xff0c;里面包含了各种操作设备的函数。而我不想学习C#&#xff0c;使用C来调用dll库的话&#xff0c;不论是显示调用&#xff08;提供h文件&#xff0c;dll文件&#xff09…

【操作系统复习】第4章 进程同步

进程同步的概念 主要任务 ➢ 使并发执行的诸进程之间能有效地共享资源和相互合作&#xff0c;从而使程序的执行具有可再现性。 进程间的制约关系 ➢ 间接相互制约关系(互斥关系) • 进程互斥使用临界资源 ➢ 直接相互制约关系&#xff08;同步关系&#xff09; •…

GDPU C语言 天码行空5

&#x1f648; 仅供参考,欢迎指正 填空(语法题) 1. 9.502. 03. 2.504. 3.505. 16. 07. 78. 09. 110. 011. 112. 113. 014. 115. 2416. 6017. 018. 319. 020. 64⭐ 直接拷贝输出就好 #include<stdio.h>int main(){// 1 // printf("%…

Java基础——日志,Logback入门

日志 &#xff08;1&#xff09;程序中的日志&#xff1a; 程序中的日志可以用来记录程序运行过程中的信息&#xff0c;并可以永久存储。&#xff08;2&#xff09;日志技术具备的优势&#xff1a; 可以将系统执行的信息选择性的记录到指定位置&#xff08;控制台&#xff0…

GEE:支持矢量机(SVM)分类教程

在Google Earth Engine平台上,使用支持向量机(SVM)进行土地利用分类是一种强大的技术。在本文中,我们将介绍如何使用GEE和SVM算法进行土地利用分类。 结果展示, 具体过程如下: 数据准备 首先,我们需要准备用于分类的地理空间数据,包括土地覆盖类型和地表特征数据。GE…

队列知识及编程练习总结

目录 一、背景知识 二、队列的应用 &#xff08;一&#xff09;在Spring中的应用 &#xff08;二&#xff09;在其他框架中的应用 &#xff08;三&#xff09;在实际开发中的应用 三、相关编程练习 &#xff08;一&#xff09;用队列实现栈 &#xff08;二&#xff09…

【CE】Mac下的CE教程Tutorial:进阶篇(第8关:多级指针)

▒ 目录 ▒&#x1f6eb; 导读开发环境1️⃣ 第8关&#xff1a;多级指针翻译操作验证其它方案&#x1f6ec; 文章小结&#x1f4d6; 参考资料&#x1f6eb; 导读 开发环境 版本号描述文章日期2023-03-操作系统MacOS Big Sur 11.5Cheat Engine7.4.3 1️⃣ 第8关&#xff1a;多…

DCT-Net工业级轻量化人像漫画

工业级轻量AI人像漫画开源模型技术解析_哔哩哔哩_bilibiliModelScope 旨在打造下一代开源的模型即 服务共享平台&#xff0c;为泛 AI 开发者提供灵活、易用、低成本的一站式模型服务产品&#xff0c;让模型应用更简单&#xff01;欢迎使用魔搭社区&#xff1a;ModelScope.cn, 视…

JVM:线上服务CPU爆满,如何排查(三)

0. 引言 前一段时间出现了一个正则表达式引起的线上CPU爆满的问题&#xff0c;一开始没有在第一时间定位到问题&#xff0c;这里也特此记录一下&#xff0c;同时也系统的梳理下CPU爆满问题的排查思路和方法&#xff0c;为后续的同学提供参考。 1. CPU爆满问题产生的原因 我们…

八大排序算法之插入排序、希尔排序、选择排序

个人主页&#xff1a;平行线也会相交 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 平行线也会相交 原创 收录于专栏【数据结构初阶&#xff08;C实现&#xff09;】 本篇主要讲解八大排序算法中的三种排序&#xff0c;分别是&#xff1a;插入排序、希尔排…

yum源配置

一、互联网yum源&#xff08;centos7为例&#xff09;: cd /etc/yum.repos.d/ && rm -f *.repo;wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo && wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo…

Golang编译报错 ‘invalid char’

现象 最近在新电脑安装go环境&#xff0c;发现 golang 包名如果有汉字就不能编译运行。 具体来讲&#xff0c;就是 go mod tidy 报错 ‘invalid char’ 但是&#xff0c;我在以前的电脑上运行 go mod tidy 没有问题 原因 我对比了 go sdk 版本&#xff0c;旧电脑用 go 1.13…

Html5钢琴块游戏制作(音乐游戏)

当年一款手机节奏音游&#xff0c;相信不少人都玩过或见过。最近也是将其做了出来分享给大家。 游戏的基本玩法&#xff1a;点击下落的黑色方块&#xff0c;弹奏音乐。&#xff08;下落的速度会越来越快&#xff09; 可以进行试玩&#xff0c;手机玩起来效果会更好些。 点击…

Java就业前景如何?

Java还有出路吗&#xff1f;2023年的就业市场依然经历着面临挑战&#xff0c;很多有经验有技术的人被淘汰下来&#xff0c;而马上又有一千多万的新鲜血液涌入就业市场。经济大环境对于各行各业的影响是非常大的&#xff0c;也为IT行业的内卷推波助澜。在2023年想学习Java入行就…