• pta团队天题题-阅览室(c++)


    天梯图书阅览室请你编写一个简单的图书借阅统计程序。当读者借书时,管理员输入书号并按下S键,程序开始计时;当读者还书时,管理员输入书号并按下E键,程序结束计时。书号为不超过1000的正整数。当管理员将0作为书号输入时,表示一天工作结束,你的程序应输出当天的读者借书次数和平均阅读时间。

    注意:由于线路偶尔会有故障,可能出现不完整的纪录,即只有S没有E,或者只有E没有S的纪录,系统应能自动忽略这种无效纪录。另外,题目保证书号是书的唯一标识,同一本书在任何时间区间内只可能被一位读者借阅。

    输入格式:

    输入在第一行给出一个正整数N(≤10),随后给出N天的纪录。每天的纪录由若干次借阅操作组成,每次操作占一行,格式为:

    书号([1, 1000]内的整数) 键值SE) 发生时间hh:mm,其中hh是[0,23]内的整数,mm是[0, 59]内整数)

    每一天的纪录保证按时间递增的顺序给出。

    输出格式:

    对每天的纪录,在一行中输出当天的读者借书次数和平均阅读时间(以分钟为单位的精确到个位的整数时间)。

    输入样例:

    1. 3
    2. 1 S 08:10
    3. 2 S 08:35
    4. 1 E 10:00
    5. 2 E 13:16
    6. 0 S 17:00
    7. 0 S 17:00
    8. 3 E 08:10
    9. 1 S 08:20
    10. 2 S 09:00
    11. 1 E 09:20
    12. 0 E 17:00

    输出样例:

    1. 2 196
    2. 0 0
    3. 1 60

    把这题收录下来主要是多给自己以后留心一下怎么输入最方便,这题用scanf里面可以确定格式输入得到时间和分钟,假如用c++的cin输入的话还要字符串转数字来使用就会很麻烦。

    其次今天在vs里面遇到了scanf_s里面报错的问题这里也记录一下 

    这里当时我用vs输入案例发现总是输入不完,后面搜了一下scanf_s才知道其实scanf_s是有三个参数的,在输入字符的时候要规定大小,其他的就不用,scanf不用,这里只是在vs使用的时候要在输入后面加上sizeof(1),然后就不会报错了 

    然后就是整体代码的思路问题了,这题不难就是要知道怎么去分配各种数据并且使用,这里给出代码 

    1. #include
    2. using namespace std;
    3. const int N = 1010;
    4. int st[N];//用来排除无效记录
    5. int hour1[N], hour2[N];//记录两次分别出现的时间
    6. int min1[N], min2[N];
    7. int main()
    8. {
    9. int i = 1;//这里i的作用是用来记录第几天
    10. int n;
    11. cin >> n;
    12. int sum = 0,books=0;
    13. while (i<=n) {
    14. int a,hour,min;
    15. char c;
    16. scanf("%d %c %d:%d", &a, &c, &hour, &min);
    17. if (a == 0) { //判断是否是最后一次
    18. i++;
    19. if (books != 0) {
    20. printf("%d %.0f\n",books,1.0*sum/books);
    21. }
    22. else cout << 0 << " " << 0<
    23. sum = 0, books = 0;//记得到后一天要刷新sum和books的值
    24. continue;
    25. }
    26. if (c == 'S') {
    27. hour1[a] = hour, min1[a] = min;
    28. st[a] = 1;
    29. }
    30. if (c == 'E' && st[a] == 1) {
    31. hour2[a] = hour, min2[a] = min;
    32. books++;
    33. sum += (hour2[a] - hour1[a]) * 60 + min2[a] - min1[a];
    34. st[a] = 0;
    35. }
    36. }
    37. return 0;
    38. }

      最后遇到的问题就是输出问题,对于为什么不由c++的cout来输出,这里要四舍五入的输出,因此用c++的cout来实现sum/books只会直接保留整数部分,因此这里使用c语言的%.0f来实现四舍五入后保留小数部分,后面也专门去查了一下这里附上截图

  • 相关阅读:
    【flask框架】模型model
    【算法|前缀和系列No.2】牛客网 DP35 【模板】二维前缀和
    从React源码分析看useEffect
    SpringBoot原理初探
    ES6类和继承
    java 高级面试题分布式与微服务(借鉴)
    JavaScript中的作用域及作用域链(es6)
    应急响应-计划任务排查
    Python吴恩达深度学习作业12 -- 卷积神经网络的应用
    RocketMQ这样做,压测后性能提高30%
  • 原文地址:https://blog.csdn.net/m0_74012728/article/details/136593991