C语言 满分代码: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 <stdio.h> #include <string.h> #include <math.h> #include <stdlib.h> int b[1005]; int main() {int n; scanf("%d",&n);int x,y,z;char a[5];int sum=0,s=0;memset(b,-1,sizeof(b));while(n--){while(1){scanf("%d %s %d:%d",&x,a,&y,&z);if(x==0){memset(b,-1,sizeof(b));if(s!=0) printf("%d %0.0f\n",s,(double)sum/s);else printf("0 0\n");sum= s =0;break;}elseif(a[0]=='S') b[x] = y*60 + z ;else if(a[0]=='E' && b[x] != -1){s++;sum += y*60 + z - b[x] ;b[x]=-1;}}} return 0; }
每日一句
當你想要“遵從內心而活”,你就會發現,自己不會被外在多余的事情所困擾。
總結
以上是生活随笔為你收集整理的C语言 满分代码:L1-043 阅览室 (20分)(解题报告)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 5行代码解决——L1-042 日期格式化
- 下一篇: C语言 满分代码:L1-044 稳赢 (