天梯图书阅览室请你编写一个简单的图书借阅统计程序。当读者借书时,管理员输入书号并按下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发生冲突!
-
相关阅读:
Elasticsearch-使用Logstash同步Mysql
JS学习笔记
DALL·E 3怎么用?DALL·E 3如何申请开通 ?DALL·E 3如何免费使用?AI绘画教程来喽~
mysql 查询在一张表不在另外一张表的记录
Pandas ExcelWrite()读写Excel
数字马力面试题
门控循环单元(GRU)【动手学深度学习v2】
动态内存操作(2)
day57【动态规划】647.回文子串 516.最长回文子序列
PHP-FPM配置文件详解
-
原文地址:https://blog.csdn.net/2402_82472978/article/details/136423459