L 1-8 L 1-043閲覧室(20分)2020/11/15エレベーターシミュレーション問題_C言語


階段図書閲覧室は簡単な図書貸し出し統計プログラムを作成してください.読者が本を借りる時、管理者は本の番号を入力してSボタンを押して、プログラムは計時を開始します;読者が本を返す時、管理者は本番号を入力してEボタンを押して、プログラムは計時を終了します.書号は1000を超えない正の整数です.管理者が0を書番として入力すると、一日の仕事が終わることを示し、あなたのプログラムは当日の読者の借書回数と平均読書時間を出力しなければならない.
注意:線路がたまに故障するため、不完全な記録が発生する可能性があります.すなわち、SだけがEではないか、EだけがSの記録がない場合、システムは自動的にこのような無効な記録を無視することができます.また、タイトル保証書番号は本の唯一の標識であり、同じ本はいつでも1人の読者に借りられる可能性がある.
入力フォーマット:入力は、最初の行に正の整数N(≦10)を与え、その後、N日のレコードを与える.毎日のレコードは数回の貸し出し操作で構成され、操作ごとに1行を占め、フォーマットは次のとおりです.
ブック番号([1,1000]内の整数)キー値(SまたはE)の発生時間(hh:mm、hhは[0,23]内の整数、mmは[0,59]内の整数)
毎日の記録は、時間の増加順に与えられることを保証します.
出力フォーマット:毎日の記録に対して、1行に当日の読者の借書回数と平均読書時間(分単位の正確なビットまでの整数時間)を出力します.
サンプルを入力:
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 
#include 
using namespace std;
int main() {
     
    int n;
    cin >> n;
    int id, h, m, cnt = 0, sum = 0,  isborr[1010] = {
     0}, time[1010] = {
     0};
    char type, temp;
    for(int day = 0; day < n; ) {
     
        cin >> id >> type >> h >> temp >> m;
        if(id == 0) {
     
            if(cnt == 0)
                printf("0 0
"
); else printf("%d %d
"
, cnt, (int)(1.0 * sum / cnt + 0.5)); day++; cnt = sum = 0; memset(isborr, 0, sizeof(isborr)); }else if(type == 'S') { isborr[id] = 1; time[id] = h * 60 + m; }else if(type == 'E' && isborr[id] == 1) { isborr[id] = 0; sum += h * 60 + m - time[id]; cnt++; } } return 0; }