天梯图书阅览室请你编写一个简单的图书借阅统计程序。当读者借书时,管理员输入书号并按下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. 阅览室(细节、思维)相关推荐

  1. PAT L1 043 阅览室

    题目描述: 天梯图书阅览室请你编写一个简单的图书借阅统计程序.当读者借书时,管理员输入书号并按下S键,程序开始计时:当读者还书时,管理员输入书号并按下E键,程序结束计时.书号为不超过1000的正整数. ...

  2. visual stdio打开之后与屏幕尺寸不匹配_柔和点亮桌面,让眼睛更舒服,雷神屏幕挂灯L1体验...

    这两年屏幕挂灯凭借节省桌面空间.照明时屏幕不反光等优势,占据了很多人的桌面,对于经常在屏幕前工作和学习的朋友来说,屏幕挂灯无疑是比传统台灯更加实用的选择.而且比起刚开始价格偏高的门槛,现在屏幕挂灯作为 ...

  3. 6. 设计模式之迭代思维:如何高效编程?

    一.什么是高效编程? 在编程的路上,你是不是曾有过这样的经历:虽然学会一门编程语言后会写代码了,但是有时写出的代码可能并没有想象的那么好.比如: 你的代码只要没有经过测试,发布上线后总是会频繁发生故障 ...

  4. 设计模式之迭代思维:如何高效编程?

    在编程的路上,你是不是曾有过这样的经历:虽然学会一门编程语言后会写代码了,但是有时写出的代码可能并没有想象的那么好.比如: 你的代码只要没有经过测试,发布上线后总是会频繁发生故障: 每次你修改完代码后 ...

  5. 团体程序设计天梯赛-练习集-java

    java不一定能都过 有星号*的都是我java过不去的 但是代码思路都是对的 如果需要c++的 可以留言 L1 L2 L3 001 Hello World 紧急救援 凑零钱 002 打印沙漏 链表去重 ...

  6. 3.1.9 二级页表

    目录 思维导图 单级页表存在的问题 二级页表的原理 地址结构 如何实现地址转换 需要注意的细节 思维导图 单级页表存在的问题 二级页表的原理 地址结构 如何实现地址转换 需要注意的细节

  7. 3.1.7 基本地址变换机构

    目录 思维导图 地址变换过程 其它小细节 思维导图 地址变换过程 其它小细节

  8. 人的核心竞争力,超过一半都来自不紧急的事

    本文转自我是拾遗君 光荣之路 拾遗物语 无用之用,方为大用--庄子. 名嘴蔡康永写过一篇博客, 说台湾父母最喜欢说一句话, 这句话就是--这有什么用? 孩子说:我想学舞台剧. 父母就问:这有什么用? ...

  9. 交流一下SAP(HR)的学习方法

    现在进入SAP顾问这个行业的有两种情况:1.学过PA课程,比如SAP硕士.顾问学院的学生:2.没有学过PA课程,比如内部顾问.ABAPer或者其他产品的顾问.不论那种情况的,刚开始接触SAP的人面对庞 ...

最新文章

  1. 如何对 Rocksdb以及类似存储引擎社区 提出 有效的性能问题?
  2. 了解这4个重点,带你探索未来将如何设计智能系统和机器人!
  3. SDN的实现思路—Vecloud微云
  4. Android Studio 插件开发详解一:入门练手
  5. 计量经济学自相关matlab,计量经济学 自相关性.ppt
  6. Android笔记 方向传感器
  7. Debian Gnu/Linux 9 安装remmina软件过程记录
  8. android handler的机制和原理_Android 插件化原理——Hook机制之AMSamp;PMS解析
  9. sublime不认识python_Python3小白入门 Sublime Text3
  10. Shadow Map在DirectX9.0 SDK Sample 的实现方法
  11. Web移动开发基本概念
  12. win10 android fastboot usb驱动
  13. 诺基亚WP7手机或10月发布 搭载新版系统
  14. WKWebView 使用及注意点(keng)
  15. Matlab报错错误使用symengine
  16. POI抓取PPT图表页图表标题
  17. Android切词工具——BreakIterator(2)
  18. 原来面试成功的程序员简历都是这样写的
  19. 匹配表情emoji 正则_js判断替换emoji表情?
  20. Linux服务器下配置tomcat宕机重启

热门文章

  1. 最新面试题汇总(附带答案)【建议看看】
  2. ANSI, UTF-8, Unicode, GBK, GB2312 字符编码小结
  3. Windows之系统自带截屏快捷键
  4. node.js+uni计算机毕设项目文具商城微信小程序(程序+小程序+LW)
  5. 做哪些网站基本优化可以提高网站权重?
  6. 爱学仕家长技术服务支持
  7. Python 之父爆料:明年至少令 Python 提速 1 倍!
  8. 【数据库】关于SQL SERVER的排序规则的问题分析
  9. Angular + Leaflet 实现房源数据可视化(附github源码)
  10. 数据库各厂商发展历史(5. Teradata)