二維數組填坑 PTA 天梯賽 L1-043 閱覽室

L1-043 閱覽室 (20分)

天梯圖書閱覽室請你編寫一個簡單的圖書借閱統計程序。當讀者借書時,管理員輸入書號並按下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

思路:
簡單分析下這個題(坑)

  • 只有借了之後還的書纔算一次,借了沒還 和 沒借就還 的都不算(就這線路還設計系統。。。還不如用紙筆記效率高,真浪費資源)
  • 注意四捨五入!至少有兩個點是需要四捨五入才能過的
  • 每次循環之後一定要清零,新的一天新的開始

代碼:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int N,n,min,hour,T,d;
    cin>>N;
    char c;
    while(N--)//N=0時退出循環
    {
        int a[1001][2]={0};
        T=0,d=0;
        //每次循環清零一次
        while(scanf("%d %c %d:%d",&n,&c,&hour,&min))
        {
            if(n==0)break;
            a[n][0]++;
            if(c=='S')
                a[n][1]=hour*60+min;
                //全部換算成分鐘
            else if(c=='E' && a[n][0]%2==0){
                d++;
                T=T+hour*60+min-a[n][1];
                //還書時間的分鐘數減去借書時間的分鐘數
                a[n][1]=0;
            }
        }
        if(d==0)cout<<"0 0"<<endl;
        else{
            int h=(int)(1.0*T/d + 0.5);
            //注意一定要四捨五入!
            cout<<d<<" "<<h<<endl;
        }
    }
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章