天梯赛L1043 阅览室 模拟题

链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805087447138304

 

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

 

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

 

输入格式:

 

输入在第一行给出一个正整数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
注意每一次要重置借书记录,直接写一个函数转换时间,不用对string一个一个的进行操作,一借一还之后还可以重复的借书
代码:
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<map>
 4 #include<cmath>
 5 #include<cstring>
 6 using namespace std;
 7 const int maxn=1e3+5;
 8 int flag[maxn];//记录书借出的时间
 9 
10 int check(string s)//将时间转换为分钟数
11 {
12     int h=(s[0]-'0')*10+s[1]-'0';
13     int m=(s[3]-'0')*10+s[4]-'0';
14     int time=h*60+m;
15     return time;
16 }
17 
18 //重置借书记录
19 void reset(int book[])
20 {
21     for(int i=0; i<maxn; i++)
22         book[i]=-1;
23     return;
24 }
25 
26 int main()
27 {
28     int day,id;//记录天数和书的编号
29     char ch;
30     string s;
31     cin>>day;
32     cin>>id>>ch>>s;
33     int t=0,n=0;//t,借书次数,n,总阅读时间
34     reset(flag);//大方向重置 
35     while(1)
36     {
37         if(id==0)
38         {
39             reset(flag);//每天结束后都要重置借书记录
40             double ans;//平均阅读时间
41             if(t) ans=round(n*1.0/t);
42             else ans=0;
43             cout<<t<<" "<<ans<<endl;//次数和平均时间 
44             day--;
45             t=0;
46             n=0;
47         }
48         
49         else if(ch=='S') flag[id]=check(s);//如果是借书,直接记录该书借出的时间
50        
51         else if(ch=='E' && flag[id]!=-1)
52         { //如果是还书,那必须是之前借出的,否则视为无效还书记录不做处理
53             t++;//记录借书的次数 
54             n+=check(s)-flag[id];
55             flag[id]=-1;//重置书的编号 
56         }
57         if(day==0) return 0;
58         cin>>id>>ch>>s;//这里没用数组进行输入 
59     }
60     return 0;
61 }

 

 
原文地址:https://www.cnblogs.com/sweetlittlebaby/p/12442901.html