L1-043閲覧室(構造+丸み)

説明

L1-043読書室(20分)ティアンティ本読書室、本を借りるための簡単な統計プログラムを書いてください。読者が本を借りるとき、管理者は本番号を入力してSキーを押すと、プログラムは計時を開始します。読者が本を返すとき、管理者は本番号を入力してEキーを押すと、プログラムは計時を終了します。ブック番号は1000を超えない正の整数です。管理者が本番号として0を入力すると、その日の作業が終了したことを意味し、プログラムは本を借りている読者の数とその日の平均読書時間を出力する必要があります。

注:時折回線障害が発生すると、不完全なレコードが表示される場合があります。つまり、EなしのSのみ、またはSなしのEのみであるため、システムはこの無効なレコードを自動的に無視できるはずです。また、タイトル保証書番号は本の一意の識別番号であり、同じ本を借りることができるのは、任意の時間間隔で1人の読者のみです。

入力形式:
最初の行に正の整数N(≤10)を入力し、N日間の記録を作成します。日次レコードは複数の借用操作で構成され、各操作は1行を占め、形式は次のとおりです。

ブック番号([1、1000]の整数)キー値(SまたはE)発生時間(hh:mm、hhは[0,23]の整数、mmは[0、59]の整数)

毎日の記録は、時間の昇順で提供されることが保証されています。

出力形式:
各日のレコードについて、その日のリーダーの借用回数と平均読み取り時間を1行に出力します(分単位と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

回答

この質問は、借りる、返済しない、借りる、無視されないという2つの状況に注意を払う必要があり、それは起こらなかったと想定されます。値は、本のステータスを記録するために使用できます。1は借用を意味し、0は借用していないことを意味し、いつでも更新できます。最終時間は切り上げます。

丸め方法

C ++
呼び出し関数

 double a;
    cout<<ceil(a)<<endl;   //向上取整
    cout<<floor(a)<<endl;   //向下取整
    cout<<round(a)<<endl;   //四舍五入

C
はintを直接使用してキャストします

double a;
    cout<<(int)a<<endl;//向下取整
    cout<<(a>(int)a?(int)a+1:(int)a)<<endl;//向上取整
    cout<<(int)(a+0.5)<<endl;//四舍五入

ACコード

#include <bits/stdc++.h>
#define ll long long
using namespace std;
struct node
{
    
    
    int f;
    int h,m;
} a[1100];
int main()
{
    
    
    int n;
    cin>>n;
    while(n--)
    {
    
    
        for(int i=0; i<1100; i++)
            a[i].f=0;
        int num,hh,mm;
        char c;
        int time=0,peo=0;
        while(~scanf("%d %c %02d:%02d",&num,&c,&hh,&mm))
        {
    
    
            if(num==0)break;
            if(c=='S')
            {
    
    
                a[num].f=1;
                a[num].h=hh;
                a[num].m=mm;
            }
            else if(c=='E')
            {
    
    
                if(a[num].f==1)
                {
    
    
                    a[num].f=0;
                    if(hh==a[num].h)
                    {
    
    
                        time+=mm-a[num].m;
                    }
                    else
                    {
    
    
                        time+=(hh-a[num].h-1)*60;
                        time+=mm+60-a[num].m;
                    }
                     peo++;
                }
            }
        }
        if(peo==0)
        cout<<0<<" "<<0<<endl;
      else
      {
    
    
         int t=round(time*1.0/peo*1.0);
            cout<<peo<<" "<<t<<endl;
      }

    }
    return 0;
}

おすすめ

転載: blog.csdn.net/rookie636/article/details/109714554