简单编写图书借阅统计程序

这是原题截图,来自pta

img

输入样例:
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

img

#include<iostream>
using namespace std;
int hh,mm,g,i=0,id[10][1001][2]={0};
int main(){
    char ch;
    int n,num=0,time=0;        cin>>n;
    while(i<n){
    /*i用于确定输入量,表示当前输入的为第i+1天的信息,同时,当日期更新时id不做归零处理,而采用i++。*/
        scanf("%d %c %d:%d",&g,&ch,&hh,&mm);
        if(!g){
//g接收书号,为零的时候本天结束,日期更新
            i++;    
             if(num)            printf("%d %.0lf\n",num,(double)time/num);//%.xlf 四舍五入
             else printf("0 0\n");
            num=time=0;    
        continue;
        }
        if(ch=='S'){//借书    
            id[i][g][0]=1;//初始或在馆状态为0 ;借出状态为1
            id[i][g][1]=hh*60+mm;//以分钟数储存借出时间         
}
        else if(ch=='E' && id[i][g][0]==1){//还书 
                id[i][g][0]==0;// 书籍归馆状态归0 
                time+=hh*60+mm-id[i][g][1];//计算时间
                 num++;    
    }
    }
    return 0;
}

你的解题思路没有问题,只是有个小错误。
id[i][g][0]==0;这句应改为id[i][g][0]=0;

求大佬看一下错在哪了,一直过不了,非常您的感谢解答

img

代码量有点大
计算分钟借鉴了:https://ask.csdn.net/questions/749189

#include <iostream>
using namespace std;
int c(string time1,string time2)
{
    int h1, m1;
    int h2, m2;
    int h, m;
    sscanf(time1.c_str(), "%d:%d", &h1, &m1);
    sscanf(time2.c_str(), "%d:%d", &h2, &m2);
    if (m2 < m1)
    {
        m = m2 + 60 - m1;
        h2--;
    }
    else
    {
        m = m2 - m1;
    }
    if (h2 < h1)
    {
        h = h2 + 24 - h1;
    }
    else
    {
        h = h2 - h1;
    }
    return h*60+m;
}
int main()
{
    int count=0,j,k,i,n,t[1000],h=0,flg=0,p=0,t2=0;
    char r[1000];
    int pos1=0,pos2=0,tem;
    string w[1000];
    cin >> n;
    while(count<n)
    {
        cin >>t[h];
        cin >>r[h];
        cin >>w[h];
        if(t[h]==0)
            count++;
        h++;
    }
    for(j=0; j<h; j++)
    {
        p=0;
        if(t[j]==0)
        {
            for(k=flg; k<j; k++)
            {
                for(i=flg; i<j; i++)
                {
                    if(t[k]==t[i]&&r[k]-r[i]=='S'-'E')
                    {
                        p++;
                        pos1=k;
                        pos2=i;
                        t2+=c(w[pos1],w[pos2]);
                    }
                }
            }
            if(p==0)
                cout << 0<<" "<< 0 << endl;
            else
            {
                if((double)t2/p-int(t2/p)>=0.5)
                    tem=t2/p+1;
                else
                    tem=t2/p;
                cout << p<<" "<<tem<<endl;
                flg=j+1;
                t2=0;
            }
        }
    }
}

img


这两个变量有定义吗?

你这块逻辑不对:

img