PAT刷題之閱覽室

L1-043 閱覽室 (20 分)

天梯圖書閱覽室請你編寫一個簡單的圖書借閱統計程序。當讀者借書時,管理員輸入書號並按下S鍵,程序開始計時;當讀者還書時,管理員輸入書號並按下E鍵,程序結束計時。書號爲不超過1000的正整數。當管理員將0作爲書號輸入時,表示一天工作結束,你的程序應輸出當天的讀者借書次數和平均閱讀時間。

注意:由於線路偶爾會有故障,可能出現不完整的紀錄,即只有S沒有E,或者只有E沒有S的紀錄,系統應能自動忽略這種無效紀錄。另外,題目保證書號是書的唯一標識,同一本書在任何時間區間內只可能被一位讀者借閱。

輸入格式:

輸入在第一行給出一個正整數N(≤10),隨後給出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

這個題總體來說其實邏輯不難,但是題本身有點問題。導致測試的時候第二個點(兩個連着借同一本書的話以第二個的時間爲準,按照邏輯來說的這個第二個時間應該是無效輸入,無語,另外兩個兩個同時還同一本書的話,以第一個爲準,這個邏輯上可以理解)和第四點(注意要四捨五入)總是不好通過,最後還是參考了別人的才通過的,簡直有點坑。不過還是收穫了很多其他的知識的。

1.第一個是數據輸入的問題,之前一直自己傻傻的在輸入框裏輸入,效率很慢,後面偶爾才發現可以通過讀取txt文件來輸入。具體如下:

ifstream f("ReadTime.txt");
    int day;
    f >> day;
    f >> book >> c;
    f >> time;

我這裏定義的time是字符串,這有點傻了,然後這一串輸入下來,還要講time轉換爲整數分鐘。

才能得到輸入 :1 S 08:10

其實用

scanf("%d %c %d:%d",&a,&ch,&t1,&t2);是比較好的,但是這種方法好像就用不了我之前讀文件的方法了,還好我找到了其他的方法,

     string str1;
    getline(f,str1);將一整行讀入到str1裏面,然後再用scanf("%d %c %d:%d",&a,&ch,&t1,&t2);

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章