L1-043. 阅览室

题目地址:https://www.patest.cn/contests/gplt/L1-043

思路:

(1)用一个结构体储存一天的借阅次数和平均阅读时间,再用一个结构体储存一天内一本书的操作,书号,借阅时间,还书时间。

(2)读取一行,若是一天结束,重复(2),也即下一天。

(3)若为借还书,A。借:则查找这本书是否已被借阅但未显示归还(由于线路偶尔会有故障,可能出现不完整的纪录),是:在原来的位置储存借书时间。否:为新书,新建借                                         书id和借书时间。

                               B。还:则查找这本书是否有记录借过,若借过,则记录还书时间,将阅读时间加到当天总的阅读时间中,借阅次数加一。删除借阅记录。否:跳过。

注意点:(1)输入格式,(2)事件可能的情况考虑清楚。

(3)一次读取一行的内容,比较好,若先读取一个,则容易出错。

 1 #include<stdio.h>
 2 int main()
 3 {
 4     struct day{
 5         int num;
 6         int time;
 7     };
 8     struct day dy[10];
 9     int N;
10     scanf("%d",&N);
11     int d;
12     for(d=0;d<N;d++)    //N天 
13     {
14         struct book{
15             int id;
16             int tj;
17             int th;
18         };
19         struct book bk[1000];
20         dy[d].num=0,dy[d].time=0;     //借阅次数0,阅读时间0 
21         int i;
22         i=0;      //每天借阅的xin书次数 
23         while(1)                    //一天 
24         {
25             char ch;
26             int a,t1,t2;
27             scanf("%d %c %d:%d",&a,&ch,&t1,&t2);   //输入格式???????????、 
28             if(a==0)goto nextday;      //输入0直接进入下一天 
29             else
30             {
31                 if(ch=='S')    //
32                 {
33                     int j;
34                     j=0; 
35                     for(j=0;j<i;j++)          //此书是否已经借出过 
36                     {
37                         if(bk[j].id==a)   //借出过 且未记录到还 
38                         {
39                             bk[j].tj=t1*60+t2;   //重新存借阅时间 
40                         //    bk[j].th=-1;          //还时间为-1  
41                             goto nextstep; 
42                         } 
43                     }
44                     if(j==i)           //未借阅过 
45                     {
46                         bk[i].id=a;    //存数号 
47                         bk[i].tj=t1*60+t2;   //存借阅时间 
48                         i++;        //未借过 
49                     }
50                 }//
51                 else          //
52                 {
53                     int j;                   
54                     for(j=0;j<i;j++)       //查找是否借阅 
55                     {
56                         if(bk[j].id==a)    //是借阅的书 
57                         {
58                             bk[j].th=t1*60+t2;    //存还书时间。 
59                             dy[d].time+=bk[j].th-bk[j].tj;   //将阅读时间加到一天的阅读时间中 
60                             dy[d].num++;                  //借阅还书次数加一 
61                             bk[j].id=-1;            //清处借书 
62                             goto nextstep;
63                         } 
64                     }
65                 }//借书还书还书 
66                 nextstep:;
67             }//一天的操作 
68         }//一天是否结束     
69         nextday:;
70     }
71     for(d=0;d<N;d++)
72     {
73         if(dy[d].num==0)printf("0 0\n");
74         else printf("%d %.0f\n",dy[d].num,(float)dy[d].time/dy[d].num);
75     }
76     return 0;
77 }

 

posted @ 2018-01-18 17:45  爱你的笑  阅读(449)  评论(0编辑  收藏  举报