天梯图书阅览室请你编写一个简单的图书借阅统计程序。当读者借书时,管理员输入书号并按下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
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
- #include
- #include
- #include
- #include
- #define endl '\n'
- using namespace std;
- int a[1005];
- int main()
- {
- int n,cnt=0,sum=0,ans=0,k,h,m;
- char ch;
- memset(a,-1,sizeof(a));
- scanf("%d",&n);
- while(cnt
- {
- scanf("%d %c %d:%d",&k,&ch,&h,&m);
- if (k == 0)
- {
- cnt++;
- if (ans == 0) cout<
" "< - else cout<
" "<<round(sum/double(ans))< - ans = 0;
- sum = 0;
- memset(a,-1,sizeof(a));
- continue;
- }
- if (a[k] != -1 && ch == 'E')
- {
- ans++;
- sum = sum + (h*60+m - a[k]);
- a[k] = -1;
- }
- else
- {
- if (ch == 'S') a[k] = h*60+m;
- }
- }
- return 0;
- }
本题个人反思:
没有考虑到可能会从00:00开始,这样会导致a[k]=0;也就进不去计算的if导致出错。
下次做题时应看清答案的值域范围,[0,23*60+59],那么初始化就应该避免与0发生冲突!
-
相关阅读:
ESP 特权隔离机制—案例研究
壳聚糖-聚乙二醇-N-羟基琥珀酰亚胺|Chitosan-PEG-NHS
失物招领|基于Web的校园失物招领系统的设计与实现
OpenCV 概念、整体架构、各模块主要功能
Jmeter---非GUI命令行的执行生成报告、使用ant插件执行接口测试脚本生成报告
使用正则表达式判断日期字符串格式是否合法遇到的问题(解决)
【每日一题】1146. 快照数组
Dynamsoft Barcode Reader 9.4.0
20220802NOI模拟赛--考后总结
【Linux修炼】9.环境变量
-
原文地址:https://blog.csdn.net/2402_82472978/article/details/136423459