2026年全国青少年信息素养大赛算法应用主题赛(C++赛项-复赛模拟卷6:文末附答案)

2026年全国青少年信息素养大赛算法应用主题赛(C++赛项-复赛模拟卷6:文末附答案)

5道单选+5道多选+4道编程


一、单选题(每题2分,共5题)
  1. 在C++中,下列哪个循环结构在条件判断之前 至少执行一次循环体?

    A. for 循环  B. while 循环  C. do-while 循环  D. if 语句

  2. 已知 int a=5, b=3,执行 a += b++ 后,a 和 b 的值分别是( )。

    A. a=8, b=4  B. a=8, b=3  C. a=9, b=4  D. a=9, b=3

  3. 下列哪个是判断一个正整数 n 是否为质数的最高效 代码片段(仅针对算法复杂度)?

    A.

    cpp 复制代码
    for(int i=2; i<n; i++) if(n%i==0) return false;

    B.

    cpp 复制代码
    for(int i=2; i*i<=n; i++) if(n%i==0) return false;

    C.

    cpp 复制代码
    for(int i=2; i<=n; i++) if(n%i==0) return false;

    D.

    cpp 复制代码
    for(int i=2; i<=n/2; i++) if(n%i==0) return false;
  4. 使用二分查找算法在有序数组 {2,5,8,12,15,20,25} 中查找元素 15,需要比较的次数是( )。

    A. 1  B. 2  C. 3  D. 4

  5. 十进制数 47 转换成二进制数是( )。

    A. 101111  B. 111011  C. 110111  D. 111101


二、多选题(每题4分,共5题,错选漏选均不得分)
  1. 以下关于递归算法的说法,正确的有( )。
    A. 递归算法必须有一个明确的终止条件(递归基)
    B. 递归调用会占用系统的栈空间,深度过大可能导致栈溢出
    C. 所有递归算法都可以用循环+栈的方式非递归实现
    D. 递归算法的时间复杂度一定高于非递归版本
  2. 关于 DFS(深度优先搜索)和 BFS(广度优先搜索),下列说法正确的有( )。
    A. DFS 通常使用栈(显式或递归隐式栈)实现
    B. BFS 通常使用队列实现
    C. BFS 适合求无权图的最短路径
    D. 在网格中从左上角到右下角的所有路径数量问题(只能向下或向右),两种搜索都能求解
  3. 以下排序算法中,平均时间复杂度为 O(n log n) 的有( )。
    A. 冒泡排序  B. 选择排序  C. 快速排序  D. 归并排序
  4. 以下排序算法中,属于稳定 排序的有( )。
    A. 归并排序  B. 快速排序  C. 冒泡排序  D. 选择排序
  5. 二分查找算法要求待查找的数据结构必须满足( )。
    A. 有序  B. 随机存取(如数组)  C. 元素均为整数  D. 链式存储

三、编程题(共70分)
编程题1:丝路里程计算(15分)

题目描述

丝绸之路沿线有 N 个城市,编号 1 ~ N。已知相邻城市间的距离(第 i 个距离表示城市 i 到城市 i+1 的距离)。商队从城市 L 出发前往城市 R(L < R),请计算需要行进的总路程。

输入格式

第一行一个整数 N (2 ≤ N ≤ 100)。

第二行 N-1 个正整数,表示相邻城市的距离(单位:里)。

第三行两个整数 L, R (1 ≤ L < R ≤ N)。

输出格式

输出一个整数,表示从 L 到 R 的总路程。

样例输入

复制代码
5
10 20 30 40
2 5

样例输出

复制代码
90

样例解释:城市2→3(20里) + 3→4(30里) + 4→5(40里) = 90里。


编程题2:商队最长三日里程(15分)

题目描述

商队在丝绸之路上连续记录了 N 天的每日行进里程(正整数)。请找出连续3天 中总里程最大的值,并输出该最大值。

如果 N < 3,则输出 0。

输入格式

第一行一个整数 N (1 ≤ N ≤ 1000)。

第二行 N 个正整数,表示每天的里程(单位:里,≤ 10000)。

输出格式

输出一个整数,表示最大的连续3天里程之和。若不足3天,输出 0。

样例输入1

text

复制代码
5
30 40 20 50 60

样例输出1

text

复制代码
130

解释 :连续三天组合:

30+40+20=90,40+20+50=110,20+50+60=130 → 最大为130。

样例输入2

text

复制代码
2
10 20

样例输出2

text

复制代码
0

解释:不足3天,输出0。


编程题3:货物清单统计(20分)

题目描述

商队在丝绸之路上经过多个集市,记录下了交易的货物清单。每条记录格式为 "货物名称:数量"。现在需要统计每种货物的总数量,并按照货物名称的字典序输出。

输入格式

第一行一个整数 n (1 ≤ n ≤ 100),表示记录条数。

接下来 n 行,每行一个字符串,格式为 "name:num",其中 name 为不含空格的小写字母串(长度 ≤ 20),num 为 1~1000 的整数。

输出格式

若干行,每行输出 "name total",按 name 的字典序(ASCII)从小到大排列。

样例输入

复制代码
5
silk:10
tea:5
silk:8
spice:12
tea:3

样例输出

复制代码
silk 18
spice 12
tea 8

编程题4:丝绸之路寻路(20分)

题目描述

商队需要从丝绸之路地图的左上角 (1,1) 走到右下角 (n,m)。地图是一个 n 行 m 列的网格,每个格子是 0(可通行)或 1(障碍)。商队只能向下向右 移动。请问一共有多少条不同的路径?

(注:障碍格子不能经过,左上角和右下角保证为可通行)

输入格式

第一行两个整数 n, m (1 ≤ n, m ≤ 8)。

接下来 n 行,每行 m 个整数(0 或 1),表示地图。

输出格式

输出一个整数,表示不同路径的总数。若不存在可行路径,输出 0。

样例输入

复制代码
3 3
0 0 0
0 1 0
0 0 0

样例输出

复制代码
2

解释:两条路径分别为:右→右→下→下 和 下→下→右→右;中间障碍物 (2,2) 阻挡了其他路线。


答案与解析

一、单选题
  1. C
    do-while 循环先执行一次循环体,再判断条件,故至少执行一次。forwhile 可能一次都不执行。
  2. A
    b++ 是先使用 b 的值(3),再加1。所以 a += 3 → a = 5+3=8,然后 b 变成 4。
  3. B
    判断质数只需检查 2 到 √n 的因子,复杂度 O(√n)。A、C、D 效率更低。
  4. B
    二分查找过程:
    • 初始区间 0,6,mid=3(值12),15>12,左区间 4,6
    • mid=5(值20),15<20,右区间 4,4
    • mid=4(值15),命中。共比较3次(下标3、5、4)。注意比较次数指元素比较次数,通常包括最后一次成功比较,所以是3次。但常见题中计数方式略有差异,此处严谨答案应为 3
      若按每次二分算一次比较:第一次与12比,第二次与20比,第三次与15比 → 3次。选 C。
  5. A
    47 二进制:32+8+4+2+1 = 101111(32+15=47,15=1111,所以101111)。

二、多选题
  1. ABC
    A 正确,递归必须终止条件;B 正确,递归深度过大导致栈溢出;C 正确,所有递归可转为迭代(如手动栈);D 错误,递归可能因重复计算而更低效(如斐波那契),但并非绝对。
  2. ABCD
    全部正确。D 项中网格路径数量问题(只能下/右)可用 DFS 枚举所有路径,也可用 BFS 统计方案数(但通常 DP 更佳),二者均可求解。
  3. CD
    冒泡、选择排序平均 O(n²);快速排序平均 O(n log n),最坏 O(n²);归并排序稳定 O(n log n)。
  4. AC
    归并排序和冒泡排序稳定;快速排序和选择排序不稳定。
  5. AB
    二分查找要求序列有序且支持随机存取(如数组),链表无法高效实现二分。

三、编程题参考代码及思路
编程题1:丝路里程计算
思路分析
  • 用数组存储距离,从 LR-1 累加对应下标即可。
代码实现:
cpp 复制代码
#include <bits/stdc++.h> 
using namespace std; 

int N, L, R, dist[110]; // dist[110]: 存储相邻城市间的距离,下标从1开始,dist[i] 表示城市i到城市i+1的距离

int main() {
	cin >> N;  
    for (int i = 1; i < N; i++) {
        cin >> dist[i];     // 依次读入每个路段长度
    }
    cin >> L >> R;  

    // 计算从 L 到 R 的总路程
    int ans = 0; // 累计总路程,初始化为0
    // 累加从第 L 段到第 R-1 段的距离(因为城市 i 到 i+1 对应 dist[i])
    // 当 L=2,R=5 时,需要累加 dist[2] + dist[3] + dist[4]
    for (int i = L; i < R; i++) {
        ans += dist[i];     // 将每一段距离加到 ans 中
    }

    cout << ans;  
    return 0;  
}

编程题2:商队最长三日里程
思路分析:
  • 枚举所有起始位置,计算三个数的和,打擂台更新最大值。
代码实现:
cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
int N, a[1010];
int main() {
    cin >> N;
    for (int i = 1; i <= N; i++) {
        cin >> a[i];
    }

    // 处理不足三天的情况
    if (N < 3) {
        cout << 0 << endl;
        return 0;
    }

    int maxSum = 0;// 记录最大和
    // 枚举起始位置 i :1 到 N-2(保证 i, i+1, i+2 都在范围内)
    for (int i = 1; i <= N - 2; i++) {
        // 计算从第 i 天开始连续三天的总里程
        int currentSum = a[i] + a[i+1] + a[i+2];

        // 打擂台更新最大值
        if (currentSum > maxSum) {
            maxSum = currentSum;
        }
    }

    cout << maxSum;
    return 0;
}
编程题3:货物清单统计
思路分析
  • 使用 map<string, int> 自动按字典序排序并累加数量。
代码实现:
cpp 复制代码
#include <bits/stdc++.h> 
using namespace std;

int main() {
    int n; // 记录条数
    cin >> n; // 读取 n

    map<string, int> m;// 使用 map 存储每种货物的名称及其累计数量,自动按名称字典序排序

    string s; // 临时存储每行输入
    while (n--) { // 循环 n 次,读取 n 条记录
        cin >> s; // 读取一行,格式如 "silk:10"

        // 查找冒号的位置
        int pos = s.find(':');
        // 提取货物名称(冒号前的子串)
        string name = s.substr(0, pos);
        // 提取数量(冒号后的子串),并转换为整数
        int num = stoi(s.substr(pos + 1));

        // 累加数量:如果 name 不存在,map 会自动创建键并初始化为 0,然后加上 num
        m[name] += num;
    }

    // 遍历 map,此时已按 name 的字典序(ASCII 顺序)自动排序
    for (auto p : m) {
        // 输出货物名称和累计总数量,中间用空格分隔
        cout << p.first << " " << p.second << endl;
    }

    return 0;
}
编程题4:丝绸之路寻路
思路分析
  • n和m均小于等于8,可使用深度优先搜索(DFS)递归遍历所有向下/向右移动的路径,遇到障碍或越界回溯。 (备注:当n和m较大时,可以使用DP)
代码实现:
cpp 复制代码
#include <bits/stdc++.h>  
using namespace std;

int n, m; // n:地图行数,m:地图列数
int ans = 0; // 记录从(1,1)到(n,m)的不同路径总数
int a[10][10]; // 地图数组,a[i][j]==0表示可通行,==1表示障碍物

// 深搜函数
void dfs(int x, int y) {
    // 递归终止条件:如果已经到达右下角 (n, m)
    if (x == n && y == m) {
        ans++; // 找到一条合法路径,路径数加1
        return;  // 返回上一层继续探索其他路径
    }
    // 尝试向下移动:如果下方格子存在(x+1 <= n)且不是障碍(a[x+1][y] == 0)
    if (x + 1 <= n && a[x+1][y] == 0) {
        dfs(x + 1, y); // 递归调用,进入下方格子
    }
    // 尝试向右移动:如果右方格子存在(y+1 <= m)且不是障碍(a[x][y+1] == 0)
    if (y + 1 <= m && a[x][y+1] == 0) {
        dfs(x, y + 1); // 递归调用,进入右方格子
    }
}

int main() {
    cin >> n >> m;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            cin >> a[i][j];   // a[i][j] 为 0 或 1
        }
    }
    dfs(1, 1);// 从左上角 (1,1) 出发开始DFS搜索
    cout << ans;// 输出结果
    return 0;
}

完整复赛备赛资料(助力你冲刺一等奖!)

2026年全国青少年信息素养大赛算法应用主题赛C++样题及答案解析

https://noicsp.blog.csdn.net/article/details/159561154?spm=1011.2415.3001.5331

2026年全国青少年信息素养大赛算法应用主题赛(C++赛项复赛模拟卷1:文末附答案)

https://noicsp.blog.csdn.net/article/details/159650568?spm=1011.2415.3001.5331

2026年全国青少年信息素养大赛算法应用主题赛(C++赛项复赛模拟卷2:文末附答案)

https://noicsp.blog.csdn.net/article/details/159650622?spm=1011.2415.3001.5331

2026年全国青少年信息素养大赛算法应用主题赛(C++赛项复赛模拟卷3:文末附答案)

https://noicsp.blog.csdn.net/article/details/159822116?spm=1011.2415.3001.5331

2026年全国青少年信息素养大赛算法应用主题赛(C++赛项复赛模拟卷4:文末附答案)

https://noicsp.blog.csdn.net/article/details/159823816?spm=1011.2415.3001.5331

2026年全国青少年信息素养大赛算法应用主题赛(C++赛项复赛模拟卷5:文末附答案)

https://noicsp.blog.csdn.net/article/details/160130468?spm=1011.2415.3001.5331

2025年全国青少年信息素养大赛复赛真题(算法创意实践挑战赛C++小学组试卷1:带解析)(7月6日试卷)

https://noicsp.blog.csdn.net/article/details/154933920?spm=1011.2415.3001.5331

2025年全国青少年信息素养大赛复赛真题(算法创意实践挑战赛C++初中组试卷1:带解析)(7月6日试卷)

https://noicsp.blog.csdn.net/article/details/155087249?spm=1011.2415.3001.5331

2025年全国青少年信息素养大赛复赛真题(算法创意实践挑战赛C++小学组试卷2:带解析)(7月13日试卷)

https://noicsp.blog.csdn.net/article/details/155130012?spm=1011.2415.3001.5331

2025年全国青少年信息素养大赛复赛真题(算法创意实践挑战赛C++初中组试卷2:带解析)(7月13日试卷)

https://noicsp.blog.csdn.net/article/details/155130092?spm=1011.2415.3001.5331

2024年全国青少年信息素养大赛复赛真题(算法创意实践挑战赛C++小学组:带解析)

https://noicsp.blog.csdn.net/article/details/147814614

2023年全国青少年信息素养大赛复赛真题(C++智能算法复赛真题:带解析)

https://blog.csdn.net/weixin_66461496/article/details/147968677


关注老师的专栏,查看完整版全国青少年信息素养大赛C++备赛资料(初赛+复赛):

https://blog.csdn.net/weixin_66461496/category_12969975.html

相关课程《全国青少年信息素养大赛C++复赛真题试卷及答案解析》(视频课)

https://www.bilibili.com/cheese/play/ep2532538


各种学习资料,助力大家一站式学习和提升!!!

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main(){
	cout<<"##########  一站式掌握信奥赛知识!  ##########";
	cout<<"#############  冲刺信奥赛拿奖!  #############";
	cout<<"######  课程购买后永久学习,不受限制!   ######";
	return 0;
}

【秘籍汇总】(完整csp信奥赛C++学习资料):

1、csp/信奥赛C++,完整信奥赛系列课程(永久学习):

https://edu.csdn.net/lecturer/7901 点击跳转

2、CSP信奥赛C++竞赛拿奖视频课:

https://edu.csdn.net/course/detail/40437 点击跳转

3、csp信奥赛高频考点知识详解及案例实践:

CSP信奥赛C++动态规划:

https://blog.csdn.net/weixin_66461496/category_13096895.html点击跳转

CSP信奥赛C++标准模板库STL:

https://blog.csdn.net/weixin_66461496/category_13108077.html 点击跳转

信奥赛C++提高组csp-s知识详解及案例实践:

https://blog.csdn.net/weixin_66461496/category_13113932.html 点击跳转

4、csp信奥赛冲刺一等奖有效刷题题解:

信奥赛C++普及组CSP-J一等奖通关刷题题单及题解:

https://blog.csdn.net/weixin_66461496/category_12673810.html 点击跳转

信奥赛C++普及组csp-j初赛&复赛真题题解(持续更新): https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转

信奥赛C++提高组csp-s初赛&复赛真题题解(持续更新):

https://blog.csdn.net/weixin_66461496/category_13125089.html 点击跳转

5、GESP C++考级真题题解:

GESP(C++ 一级+二级+三级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12858102.html 点击跳转

GESP(C++ 四级+五级+六级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12869848.html 点击跳转

GESP(C++ 七级+八级)真题题解(持续更新):

https://blog.csdn.net/weixin_66461496/category_13117178.html 点击跳转

· 文末祝福 ·

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main(){
	cout<<"跟着王老师一起学习信奥赛C++";
	cout<<"    成就更好的自己!       ";
	cout<<"  csp信奥赛一等奖属于你!   ";
	return 0;
}
相关推荐
视觉小萌新2 小时前
C++利用libmicrohttpd制作交互网页端——C1
java·c++·交互
fpcc2 小时前
C++编程实践—C++实现类似Qt的信号槽机制
c++·qt
格发许可优化管理系统2 小时前
Mentor许可证使用规定全解析
java·大数据·c语言·开发语言·c++
郝学胜_神的一滴2 小时前
Qt 高级开发 030:QListWidget 右键菜单全解,从策略配置到精准删除的优雅实现
c++·qt
攻城狮Soar3 小时前
STL源码解析之list(1)
开发语言·c++
2401_869769593 小时前
内容5 日期类实现
开发语言·c++
xxwl5853 小时前
一个原创题(二)
c++·算法
MZZ骏马4 小时前
C++ 极简模式的日志
c++
AbandonForce4 小时前
滑动窗口:定长滑动窗口与不定长滑动窗口
数据结构·c++·算法