題目鏈接
天梯圖書閱覽室請你撰寫一個簡單的圖書借閱統計程式,當讀者借書時,管理員輸入書號并按下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
思路:
開兩個陣列,time陣列存放時間間隔,book陣列存放書號,判斷書是否被借走,標記即可,標記該書號的book陣列,還書后,去除標記即可,四舍五入就結果加0.5就可以產生效果,之所以寫死回圈,是為了讓程式內部自己進行計算,當讀取到"0"進行判斷輸出即可并跳出該天的計算,進入下一天的計算,
代碼
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
while(cin>>n)
{
int id,h,m;//分別定義書號、小時、分鐘
char a,b;//讀取字符‘S,E、':';
for(int i=0;i<n;i++){
int time[1010]={0},book[1010]={0};//初始化兩個陣列,time陣列存放時間,book陣列存放書號
int sum=0,ant=0,t;//sum定義時間間隔,ant定義正規借的書數量,t記錄輸入時間長度
while(1)//寫死回圈
{ cin>>id>>a>>h>>b>>m;//讀取資料
t=h*60+m;//記錄時間長度
if(id==0)//為0,說明結束
{
cout<<ant<<" ";//先輸出正規借書的數量
if(ant>0)//如果數量大于0
cout<<(int)(1.0*sum/ant+0.5)<<endl;//輸出平均時間
else cout<<"0"<<endl;//否則輸出0
break;//停止回圈,跳出,并輸出結果,進入下一天的計算
}
else if(a=='S')//讀取到S說明開始借書
{
book[id]=1;//將借過的標記為1
time[id]=t;//將起始時間存放在陣列種
}
else if(a=='E'&&book[id]==1)//當讀取到E且書被借過,說明已近還書了
{
book[id]=0;//還書,去除標記
sum+=t-time[id];//求出時間間隔
ant++;//滿足正規借書還書流程,書數量++
}}}}}
如果覺得寫的還不錯點個贊吧!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/273802.html
標籤:其他
上一篇:安裝Gin核心步驟(win7)
下一篇:記得把BDF設為頂層檔案啊!!!
