天梯赛L1-043 阅览室 模拟题


链接: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 }

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM