电子学会青少年软件编程(C/C++)5级等级考试真题试卷(2024年6月)

========================================================================

答案和更多内容请查看网站:【试卷中心 -----> 电子学会 ----> C/C++ ----> 五级】

网站链接

青少年软件编程历年真题模拟题实时更新

=======================================================================

青少年软件编程(C/C++)5级等级考试真题试卷(2024年6月)
编程题
第 1 题 列车调度题目描述

火车站的列车调度铁轨的结构如下图所示。

两端分别是一条入口(Entrance)轨道和一条出口(Exit)轨道,它们之间有N条平行的轨道。每趟列车从入口可以选择任意一条轨道进入,最后从出口离开。在图中有 9 趟列车,在入口处按照 { 8,4,2,5,3,9,1,6,7 } 的顺序排队等待进入。如果要求它们必须按序号递减的顺序从出口离开,则至少需要多少条平行铁轨用于调度?

输入

输入第一行给出一个整数 N (2 ≤ N ≤ 105),下一行给出从 1 到 N的整数序号的一个重排列。数字间以空格分隔。

输出

在一行中输出可以将输入的列车按序号递减的顺序调离所需要的最少的铁轨条数。

样例输入

9

8 4 2 5 3 9 1 6 7

样例输出

4

查看答案

复制代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin >> n;
    int a[n] = {0};
    int x;//每次输入的列车序号
    int t = 0;
    for (int i = 0; i < n; i++)
    {
        cin >> x;
        if (t == 0 || a[t - 1] < x) //t-1是因为a[t]是0,a[t-1]才是真正的序号
        //如果最后一个道路的最后一个元素都比x小,
        //说明前几条道路也没有能容下x的了
        {
            a[t] = x; //第一个进去的,一定是这一列最大的
            // printf("t=%d  a[%d]=%d  x=%d\n",t,i,a[i],x);
            t++;
        }
        int l = 0, r = t, mid; //t代表了当前开辟的道路的数量
        while (l < r)
        {
            mid = (r - l) / 2 + l;
            if (x <= a[mid])
            {
                r = mid;
            }
            else
                l = mid+1 ;
        }
        a[l] = x;
        //测试用:
        // for (int j = 0; j < t; j++)
        // {
        //     cout << a[j] << ' ';
        // }
        // cout << endl;
    }
    cout << t;
    return 0;
}

第 2 题 实验室使用排期

受新冠疫情影响,当前大家的活动都必须注意保持充分的社交距离,国家实验室的使用也同样受到了严格的限制。假设规定任何一个时间点上,实验室内最多只能有 1 个人,且每个人都必须提前申请实验室的使用,只有申请被批准后才能进入。现给定一批第二天的实验室使用申请,你需要写个程序自动审批,使得能够被批准的申请数量最大化。

输入格式:

输入第一行首先给出一个正整数 N(≤2×103),为申请总量。随后 N 行,每行按以下格式给出申请信息:

hh:mm:ss hh:mm:ss

Copy

其中 hh:mm:ss 表示一天内的时间点"小时:分钟:秒钟",最早从 00:00:00 开始,最晚到 23:59:59 结束。第一个时间点为进入实验室的时间,第二个是离开时间。题目保证离开时间在进入时间之后。

注意所有时间都在一天之内。时间按 24 小时显示。

输出格式:

在一行中输出能够被批准的最大申请数量。

输入样例:

7

18:00:01 23:07:01

04:09:59 11:30:08

11:35:50 13:00:00

23:45:00 23:55:50

13:00:00 17:11:22

06:30:50 11:42:01

17:30:00 23:50:00

输出样例:

5

样例解释:

除了最后两个申请,其它都可以被批准。

查看答案

复制代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
struct ff{
    int a,b;
}a[10010];
int f(string s){
    int sum=0;
    sum+=((s[0]-'0')*10+(s[1]-'0'))*3600;
    sum+=((s[3]-'0')*10+(s[4]-'0'))*60;
    sum+=(s[6]-'0')*10+(s[7]-'0');
    return sum;
}
bool cmp(ff p,ff q){
    if(p.b==q.b) return p.a<q.a;
    return p.b<q.b;
}
signed main(){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        string x,y;
        cin>>x>>y;
        a[i].a=f(x);
        a[i].b=f(y);
    }
    sort(a+1,a+n+1,cmp);
    int cnt=1;
    int t=a[1].b;
    for(int i=2;i<=n;i++){
        if(a[i].a>=t){
            cnt++;
            t=a[i].b;
        }
    }
    cout<<cnt;
}

========================================================================

答案和更多内容请查看网站:【试卷中心 -----> 电子学会 ----> C/C++ ----> 五级】

网站链接

青少年软件编程历年真题模拟题实时更新

=======================================================================

相关推荐
口嗨农民工3 分钟前
win10默认搜索APP和window设置控制命板
linux·服务器·c语言
linux kernel1 小时前
第二十三讲:特殊类和类型转换
开发语言·c++
渡我白衣1 小时前
深入剖析:boost::intrusive_ptr 与 std::shared_ptr 的性能边界和实现哲学
开发语言·c++·spring
怀旧,1 小时前
【C++】26. 智能指针
开发语言·c++·算法
Haooog1 小时前
654.最大二叉树(二叉树算法)
java·数据结构·算法·leetcode·二叉树
Swift社区1 小时前
LeetCode 392 判断子序列
算法·leetcode·职场和发展
芒果量化2 小时前
ML4T - 第7章第8节 利用LR预测股票价格走势Predicting stock price moves with Logistic Regression
算法·机器学习·线性回归
东方芷兰2 小时前
JavaWeb 课堂笔记 —— 20 SpringBootWeb案例 配置文件
java·开发语言·笔记·算法·log4j·intellij-idea·lua
楼田莉子2 小时前
vscode搭建C/C++配置开发环境
c语言·开发语言·c++·vscode·学习·编辑器
Diligence8153 小时前
最优化方法
算法