【PTA】L1-043 阅览室(C++)

这篇具有很好参考价值的文章主要介绍了【PTA】L1-043 阅览室(C++)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

l1-043 阅览室c++,PTA刷题库,c++,算法,数据结构

题目链接:L1-043 阅览室 - 团体程序设计天梯赛-练习集 (pintia.cn) 

目录:

目录:

题目要求:

输入格式:

输出格式:

输入样例:

输出样例:

 思路:

代码:;

测试结果:


题目要求:

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

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

输入格式:

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

书号([1, 1000]内的整数) 键值SE) 发生时间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

代码长度限制        16 KB

时间限制                400 ms

内存限制                64 MB

 思路:

处理一系列图书借阅和归还的事件,并计算每个事件的平均借阅时间。程序的主要逻辑是通过读取输入数据,记录每个书号(id)的借阅和归还时间,最后计算并输出每天的平均借阅时间。

以下是对程序的详细分析:

头文件和命名空间:

这里包含了<bits/stdc++.h>头文件,它实际上是一个包含了C++标准库中几乎所有头文件的头文件。使用using namespace std;为了避免在代码中重复写std::前缀。

#include <bits/stdc++.h>  

using namespace std;

主函数:

程序的入口

int main()
 
{
 
       ....
 
}

读取测试案例数量:

程序首先读取一个整数n,代表接下来要处理的测试案例数量。然后通过一个while循环处理每个测试案例。

int n = 0;  
cin >> n;  
while(n--)

读取和处理每个测试案例

对于每个测试案例,程序读取一系列图书借阅和归还事件。    

  • 变量声明

这些变量用于存储每个事件的详细信息。 

cpp`int id = 0;    //记录书号  
char ch;       //记录键值  
int hh = 0;    //记录发生时间的hh  
int mm = 0;    //记录发生时间的mm`
  • 初始化数组

        这是一个二维数组,用于记录每个书号的借阅时间。数组的第一维是书号,第二维的第一个元素标记书是否已借出(1表示借出,0表示未借出),第二个元素记录借出的时间(以分钟为单位)。

 

cpp`int arr[1001][2] = {0};//记录每次借书的时间`
  • 读取和处理事件

程序在一个while循环中读取每个事件。当id为0时,表示没有更多的事件需要处理,循环结束。

在循环内部,程序根据ch的值('S'表示借阅,'E'表示归还)来更新arr数组和计算借阅时间。

如果ch是'S',则标记该书为已借出,并记录借出的时间。

如果ch是'E',则检查该书是否之前已借出。如果是,则计算借阅时间(归还时间减去借出时间),并更新总借阅时间和借阅次数。

while(id)  
{  
    // ... 省略了部分代码  
    scanf("%d %s %d:%d", &id, &ch, &hh, &mm);  
}`
  • 输出结果

如果当天没有借阅事件(temp为0),则输出"0 0"。否则,输出借阅次数(temp)和平均借阅时间(time除以temp)。

cpp`if(temp == 0)  
    cout << "0 0" << endl;  
else  
    printf("%d %.0f\n",temp,  1.0 * time / temp);`

代码:;

#include <bits/stdc++.h>

using namespace std;

int main()
{
    int n = 0;
    cin >> n;
    while(n--)
    {
        int id = 0;    //记录书号
        char ch;       //记录键值
        int hh = 0;    //记录发生时间的hh
        int mm = 0;    //记录发生时间的mm
        scanf("%d %s %d:%d", &id, &ch, &hh, &mm);
        int arr[1001][2] = {0};//记录每次借书的时间
        int time = 0;    //记录当天借书的总时间
        int temp = 0;    //记录当天借书次数
        while(id)
        {
            if(ch == 'S')
            {
                arr[id][0] = 1;
                arr[id][1] = hh * 60 + mm;
            }
            else if(ch == 'E' && arr[id][0] == 1)
            {
                
                time += hh * 60 + mm - arr[id][1];
                arr[id][0] = 0;
                temp ++;
            }
            scanf("%d %s %d:%d", &id, &ch, &hh, &mm);
        }
        if(temp == 0)
            cout << "0 0" << endl;
        else
            printf("%d %.0f\n",temp,  1.0 * time / temp);
    }
    return 0;
}

测试结果:

l1-043 阅览室c++,PTA刷题库,c++,算法,数据结构文章来源地址https://www.toymoban.com/news/detail-852686.html

到了这里,关于【PTA】L1-043 阅览室(C++)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【PTA】L1-064 估值一亿的AI核心代码(详C++)

    题目链接: L1-064 估值一亿的AI核心代码 - 团体程序设计天梯赛-练习集 (pintia.cn) 题目要求:  输入格式: 输出格式: 输入样例: 输出样例: 思路: 相关好用函数介绍:  字符函数: erase函数的三种使用方法: replace() 函数用法 代码: 测试结果:  以上图片来自新浪微博。

    2024年04月10日
    浏览(70)
  • L1-095 分寝室PTA

    学校新建了宿舍楼,共有 n 间寝室。等待分配的学生中,有女生 n0​ 位、男生 n1​ 位。所有待分配的学生都必须分到一间寝室。所有的寝室都要分出去,最后不能有寝室留空。 现请你写程序完成寝室的自动分配。分配规则如下: 男女生不能混住; 不允许单人住一间寝

    2024年02月10日
    浏览(30)
  • PTA L1-095 分寝室 (20 分)

    学校新建了宿舍楼,共有 n n n 间寝室。等待分配的学生中,有女生 n 0 n_0 n 0 ​ ​ 位、男生 n 1 n_1 n 1 ​ ​位。所有待分配的学生都必须分到一间寝室。所有的寝室都要分出去,最后不能有寝室留空。 现请你写程序完成寝室的自动分配。分配规则如下: 男女生不能混住; 不

    2023年04月23日
    浏览(25)
  • PTA L1-049 天梯赛座位分配(详解)

    前言:内容包括:题目,代码实现,大致思路,代码解读 天梯赛每年有大量参赛队员,要保证同一所学校的所有队员都不能相邻,分配座位就成为一件比较麻烦的事情。为此我们制定如下策略:假设某赛场有 N 所学校参赛,第 i 所学校有 M[i] 支队伍,每队 10 位参赛选手。令

    2024年02月03日
    浏览(31)
  • 2023 PTA天梯赛补题(L1 & L2)

    输入输出题 输入输出题 k == n 和 k == m 分别输出,题目怎么说就怎么做 判断一下c 等于a + b还是a*b或者都不是,分别按要求输出 针对每一群玩游戏的宝宝,枚举判断一下就好了 写的有点烦,基本就是一步一步模拟,思路在注释里写了 枚举分配方案,代码中a代表女生寝室的数

    2024年02月03日
    浏览(27)
  • PTA——L1-023 输出GPLT(c语言)

    给定一个长度不超过10000的、仅由英文字母构成的字符串。请将字符重新调整顺序,按 GPLTGPLT.... 这样的顺序输出,并忽略其它字符。当然,四种字符(不区分大小写)的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按 GPLT 的顺序打印,直到所有字符都被输

    2024年02月13日
    浏览(27)
  • PTA L1-048 矩阵A乘以B

    前言:内容包括四大模块:题目,代码实现,大致思路,代码解读 给定两个矩阵A和B,要求你计算它们的乘积矩阵AB。需要注意的是,只有规模匹配的矩阵才可以相乘。即若A有Ra​行、Ca​列,B有Rb​行、Cb​列,则只有Ca​与Rb​相等时,两个矩阵才能相乘。 输入格式: 输入

    2024年02月04日
    浏览(22)
  • 【2023团体程序设计天梯赛CCCC】GPLT2023,L1~L2部分(PTA,L1-089~L1-096,L2-045~L2-048)题解代码&复盘

    概要 L1部分:L1-089~L1-096 L2部分:L2-045~L2-048 L3部分:L3-033~L3-036 L1-089 最好的文档 5 L1-090 什么是机器学习 5 L1-091 程序员买包子 10 L1-092 进化论 10 L1-093 猜帽子游戏 15 L1-094 剪切粘贴 15 L1-095 分寝室 20 L1-096 谁管谁叫爹 20 L2-045 堆宝塔 25 L2-046 天梯赛的赛场安排 L2-047 锦标赛 25 L2-048

    2024年02月01日
    浏览(31)
  • PTA L1-025 正整数A+B(详解)

    前言:本期是关于正整数A+B的详解,内容包括四大模块:题目,代码实现,大致思路,代码解读,今天你c了吗?   题的目标很简单,就是求两个正整数 A 和 B 的和,其中 A 和 B 都在区间[1,1000]。稍微有点麻烦的是,输入并不保证是两个正整数。 输入格式: 输入在一行给出

    2023年04月21日
    浏览(26)
  • PTA L1-064 估值一亿的AI核心代码(详解)

    前言:内容包括:题目,代码实现,大致思路,代码解读 以上图片来自新浪微博。 本题要求你实现一个稍微更值钱一点的 AI 英文问答程序,规则是: 无论用户说什么,首先把对方说的话在一行中原样打印出来; 消除原文中多余空格:把相邻单词间的多个空格换成 1 个空格,把行首

    2024年02月03日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包