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

5道单选+5道多选+4道编程
一、单选题(每题2分,共5题)
-
在C++中,下列哪个循环结构在条件判断之前 至少执行一次循环体?
A.
for循环 B.while循环 C.do-while循环 D.if语句 -
已知
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
-
下列哪个是判断一个正整数
n是否为质数的最高效 代码片段(仅针对算法复杂度)?A.
cppfor(int i=2; i<n; i++) if(n%i==0) return false;B.
cppfor(int i=2; i*i<=n; i++) if(n%i==0) return false;C.
cppfor(int i=2; i<=n; i++) if(n%i==0) return false;D.
cppfor(int i=2; i<=n/2; i++) if(n%i==0) return false; -
使用二分查找算法在有序数组
{2,5,8,12,15,20,25}中查找元素15,需要比较的次数是( )。A. 1 B. 2 C. 3 D. 4
-
十进制数
47转换成二进制数是( )。A. 101111 B. 111011 C. 110111 D. 111101
二、多选题(每题4分,共5题,错选漏选均不得分)
- 以下关于递归算法的说法,正确的有( )。
A. 递归算法必须有一个明确的终止条件(递归基)
B. 递归调用会占用系统的栈空间,深度过大可能导致栈溢出
C. 所有递归算法都可以用循环+栈的方式非递归实现
D. 递归算法的时间复杂度一定高于非递归版本 - 关于
DFS(深度优先搜索)和BFS(广度优先搜索),下列说法正确的有( )。
A. DFS 通常使用栈(显式或递归隐式栈)实现
B. BFS 通常使用队列实现
C. BFS 适合求无权图的最短路径
D. 在网格中从左上角到右下角的所有路径数量问题(只能向下或向右),两种搜索都能求解 - 以下排序算法中,平均时间复杂度为
O(n log n)的有( )。
A. 冒泡排序 B. 选择排序 C. 快速排序 D. 归并排序 - 以下排序算法中,属于稳定 排序的有( )。
A. 归并排序 B. 快速排序 C. 冒泡排序 D. 选择排序 - 二分查找算法要求待查找的数据结构必须满足( )。
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) 阻挡了其他路线。
答案与解析
一、单选题
- C
do-while循环先执行一次循环体,再判断条件,故至少执行一次。for和while可能一次都不执行。 - A
b++是先使用 b 的值(3),再加1。所以a += 3→ a = 5+3=8,然后 b 变成 4。 - B
判断质数只需检查 2 到 √n 的因子,复杂度 O(√n)。A、C、D 效率更低。 - 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。
- A
47 二进制:32+8+4+2+1 = 101111(32+15=47,15=1111,所以101111)。
二、多选题
- ABC
A 正确,递归必须终止条件;B 正确,递归深度过大导致栈溢出;C 正确,所有递归可转为迭代(如手动栈);D 错误,递归可能因重复计算而更低效(如斐波那契),但并非绝对。 - ABCD
全部正确。D 项中网格路径数量问题(只能下/右)可用 DFS 枚举所有路径,也可用 BFS 统计方案数(但通常 DP 更佳),二者均可求解。 - CD
冒泡、选择排序平均 O(n²);快速排序平均 O(n log n),最坏 O(n²);归并排序稳定 O(n log n)。 - AC
归并排序和冒泡排序稳定;快速排序和选择排序不稳定。 - AB
二分查找要求序列有序且支持随机存取(如数组),链表无法高效实现二分。
三、编程题参考代码及思路
编程题1:丝路里程计算
思路分析:
- 用数组存储距离,从
L到R-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;
}
