L1-043. 阅览室(细节、思维)
天梯图书阅览室请你编写一个简单的图书借阅统计程序。当读者借书时,管理员输入书号并按下S键,程序开始计时;当读者还书时,管理员输入书号并按下E键,程序结束计时。书号为不超过1000的正整数。当管理员将0作为书号输入时,表示一天工作结束,你的程序应输出当天的读者借书次数和平均阅读时间。
注意:由于线路偶尔会有故障,可能出现不完整的纪录,即只有S没有E,或者只有E没有S的纪录,系统应能自动忽略这种无效纪录。另外,题目保证书号是书的唯一标识,同一本书在任何时间区间内只可能被一位读者借阅。
输入格式:
输入在第一行给出一个正整数N(<= 10),随后给出N天的纪录。每天的纪录由若干次借阅操作组成,每次操作占一行,格式为:
书号([1, 1000]内的整数) 键值(“S”或“E”) 发生时间(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)同一天中,有借没还或有还没借的书视为无效记录,不应该纳入计算中;
(2)每天结束后系统都会重置;
(3)操作时间可能是0点,所以不能简单的将书的初始状态置为零。
AC代码:
#include<iostream>
#include<cstdio>
#include<map>
#include<cmath>
#include<cstring>
using namespace std;
const int maxn=1e3+5;
int book[maxn];//记录书借出的时间//将时间转换为分钟数
int cnt(string s)
{int h=(s[0]-'0')*10+s[1]-'0';int m=(s[3]-'0')*10+s[4]-'0';int time=h*60+m;return time;
}//重置借书记录
void reset(int* book)
{for(int i=0; i<maxn; i++)book[i]=-1;return;
}int main()
{int day,id;//记录的天数和书的编号char ch;string s;cin>>day;cin>>id>>ch>>s;int t=0,n=0;//t-借书次数,n-总阅读时间reset(book);while(true){if(id==0){reset(book);//每天结束后都要重置借书记录double ans;//平均阅读时间if(t) ans=round(n*1.0/t);else ans=0;cout<<t<<" "<<ans<<endl;day--;t=0;n=0;}//如果是借书,直接记录该书借出的时间else if(ch=='S') book[id]=cnt(s);//如果是还书,那必须是之前借出的,否则视为无效还书记录不做处理else if(ch=='E' && book[id]!=-1){t++;//在这里记录借书次数,就自然的忽略了无效的借书记录n+=cnt(s)-book[id];book[id]=-1;//还完书后将该书的编号重置}if(day==0) return 0;cin>>id>>ch>>s;}return 0;
}
L1-043. 阅览室(细节、思维)相关推荐
- PAT L1 043 阅览室
题目描述: 天梯图书阅览室请你编写一个简单的图书借阅统计程序.当读者借书时,管理员输入书号并按下S键,程序开始计时:当读者还书时,管理员输入书号并按下E键,程序结束计时.书号为不超过1000的正整数. ...
- visual stdio打开之后与屏幕尺寸不匹配_柔和点亮桌面,让眼睛更舒服,雷神屏幕挂灯L1体验...
这两年屏幕挂灯凭借节省桌面空间.照明时屏幕不反光等优势,占据了很多人的桌面,对于经常在屏幕前工作和学习的朋友来说,屏幕挂灯无疑是比传统台灯更加实用的选择.而且比起刚开始价格偏高的门槛,现在屏幕挂灯作为 ...
- 6. 设计模式之迭代思维:如何高效编程?
一.什么是高效编程? 在编程的路上,你是不是曾有过这样的经历:虽然学会一门编程语言后会写代码了,但是有时写出的代码可能并没有想象的那么好.比如: 你的代码只要没有经过测试,发布上线后总是会频繁发生故障 ...
- 设计模式之迭代思维:如何高效编程?
在编程的路上,你是不是曾有过这样的经历:虽然学会一门编程语言后会写代码了,但是有时写出的代码可能并没有想象的那么好.比如: 你的代码只要没有经过测试,发布上线后总是会频繁发生故障: 每次你修改完代码后 ...
- 团体程序设计天梯赛-练习集-java
java不一定能都过 有星号*的都是我java过不去的 但是代码思路都是对的 如果需要c++的 可以留言 L1 L2 L3 001 Hello World 紧急救援 凑零钱 002 打印沙漏 链表去重 ...
- 3.1.9 二级页表
目录 思维导图 单级页表存在的问题 二级页表的原理 地址结构 如何实现地址转换 需要注意的细节 思维导图 单级页表存在的问题 二级页表的原理 地址结构 如何实现地址转换 需要注意的细节
- 3.1.7 基本地址变换机构
目录 思维导图 地址变换过程 其它小细节 思维导图 地址变换过程 其它小细节
- 人的核心竞争力,超过一半都来自不紧急的事
本文转自我是拾遗君 光荣之路 拾遗物语 无用之用,方为大用--庄子. 名嘴蔡康永写过一篇博客, 说台湾父母最喜欢说一句话, 这句话就是--这有什么用? 孩子说:我想学舞台剧. 父母就问:这有什么用? ...
- 交流一下SAP(HR)的学习方法
现在进入SAP顾问这个行业的有两种情况:1.学过PA课程,比如SAP硕士.顾问学院的学生:2.没有学过PA课程,比如内部顾问.ABAPer或者其他产品的顾问.不论那种情况的,刚开始接触SAP的人面对庞 ...
最新文章
- 如何对 Rocksdb以及类似存储引擎社区 提出 有效的性能问题?
- 了解这4个重点,带你探索未来将如何设计智能系统和机器人!
- SDN的实现思路—Vecloud微云
- Android Studio 插件开发详解一:入门练手
- 计量经济学自相关matlab,计量经济学 自相关性.ppt
- Android笔记 方向传感器
- Debian Gnu/Linux 9 安装remmina软件过程记录
- android handler的机制和原理_Android 插件化原理——Hook机制之AMSamp;PMS解析
- sublime不认识python_Python3小白入门 Sublime Text3
- Shadow Map在DirectX9.0 SDK Sample 的实现方法
- Web移动开发基本概念
- win10 android fastboot usb驱动
- 诺基亚WP7手机或10月发布 搭载新版系统
- WKWebView 使用及注意点(keng)
- Matlab报错错误使用symengine
- POI抓取PPT图表页图表标题
- Android切词工具——BreakIterator(2)
- 原来面试成功的程序员简历都是这样写的
- 匹配表情emoji 正则_js判断替换emoji表情?
- Linux服务器下配置tomcat宕机重启
热门文章
- 最新面试题汇总(附带答案)【建议看看】
- ANSI, UTF-8, Unicode, GBK, GB2312 字符编码小结
- Windows之系统自带截屏快捷键
- node.js+uni计算机毕设项目文具商城微信小程序(程序+小程序+LW)
- 做哪些网站基本优化可以提高网站权重?
- 爱学仕家长技术服务支持
- Python 之父爆料:明年至少令 Python 提速 1 倍!
- 【数据库】关于SQL SERVER的排序规则的问题分析
- Angular + Leaflet 实现房源数据可视化(附github源码)
- 数据库各厂商发展历史(5. Teradata)