2026年全国青少年信息素养大赛算法应用主题赛(C++赛项-复赛模拟卷6:文末附答案)
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.for(inti=2;i<n;i++)if(n%i==0)returnfalse;B.
for(inti=2;i*i<=n;i++)if(n%i==0)returnfalse;C.
for(inti=2;i<=n;i++)if(n%i==0)returnfalse;D.
for(inti=2;i<=n/2;i++)if(n%i==0)returnfalse;使用二分查找算法在有序数组
{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累加对应下标即可。
代码实现:
#include<bits/stdc++.h>usingnamespacestd;intN,L,R,dist[110];// dist[110]: 存储相邻城市间的距离,下标从1开始,dist[i] 表示城市i到城市i+1的距离intmain(){cin>>N;for(inti=1;i<N;i++){cin>>dist[i];// 依次读入每个路段长度}cin>>L>>R;// 计算从 L 到 R 的总路程intans=0;// 累计总路程,初始化为0// 累加从第 L 段到第 R-1 段的距离(因为城市 i 到 i+1 对应 dist[i])// 当 L=2,R=5 时,需要累加 dist[2] + dist[3] + dist[4]for(inti=L;i<R;i++){ans+=dist[i];// 将每一段距离加到 ans 中}cout<<ans;return0;}编程题2:商队最长三日里程
思路分析:
- 枚举所有起始位置,计算三个数的和,打擂台更新最大值。
代码实现:
#include<bits/stdc++.h>usingnamespacestd;intN,a[1010];intmain(){cin>>N;for(inti=1;i<=N;i++){cin>>a[i];}// 处理不足三天的情况if(N<3){cout<<0<<endl;return0;}intmaxSum=0;// 记录最大和// 枚举起始位置 i :1 到 N-2(保证 i, i+1, i+2 都在范围内)for(inti=1;i<=N-2;i++){// 计算从第 i 天开始连续三天的总里程intcurrentSum=a[i]+a[i+1]+a[i+2];// 打擂台更新最大值if(currentSum>maxSum){maxSum=currentSum;}}cout<<maxSum;return0;}编程题3:货物清单统计
思路分析:
- 使用
map<string, int>自动按字典序排序并累加数量。
代码实现:
#include<bits/stdc++.h>usingnamespacestd;intmain(){intn;// 记录条数cin>>n;// 读取 nmap<string,int>m;// 使用 map 存储每种货物的名称及其累计数量,自动按名称字典序排序string s;// 临时存储每行输入while(n--){// 循环 n 次,读取 n 条记录cin>>s;// 读取一行,格式如 "silk:10"// 查找冒号的位置intpos=s.find(':');// 提取货物名称(冒号前的子串)string name=s.substr(0,pos);// 提取数量(冒号后的子串),并转换为整数intnum=stoi(s.substr(pos+1));// 累加数量:如果 name 不存在,map 会自动创建键并初始化为 0,然后加上 numm[name]+=num;}// 遍历 map,此时已按 name 的字典序(ASCII 顺序)自动排序for(autop:m){// 输出货物名称和累计总数量,中间用空格分隔cout<<p.first<<" "<<p.second<<endl;}return0;}编程题4:丝绸之路寻路
思路分析:
- n和m均小于等于8,可使用深度优先搜索(DFS)递归遍历所有向下/向右移动的路径,遇到障碍或越界回溯。 (备注:当n和m较大时,可以使用DP)
代码实现:
#include<bits/stdc++.h>usingnamespacestd;intn,m;// n:地图行数,m:地图列数intans=0;// 记录从(1,1)到(n,m)的不同路径总数inta[10][10];// 地图数组,a[i][j]==0表示可通行,==1表示障碍物// 深搜函数voiddfs(intx,inty){// 递归终止条件:如果已经到达右下角 (n, m)if(x==n&&y==m){ans++;// 找到一条合法路径,路径数加1return;// 返回上一层继续探索其他路径}// 尝试向下移动:如果下方格子存在(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);// 递归调用,进入右方格子}}intmain(){cin>>n>>m;for(inti=1;i<=n;i++){for(intj=1;j<=m;j++){cin>>a[i][j];// a[i][j] 为 0 或 1}}dfs(1,1);// 从左上角 (1,1) 出发开始DFS搜索cout<<ans;// 输出结果return0;}完整复赛备赛资料(助力你冲刺一等奖!)
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
各种学习资料,助力大家一站式学习和提升!!!
#include<bits/stdc++.h>usingnamespacestd;intmain(){cout<<"########## 一站式掌握信奥赛知识! ##########";cout<<"############# 冲刺信奥赛拿奖! #############";cout<<"###### 课程购买后永久学习,不受限制! ######";return0;}【秘籍汇总】(完整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 点击跳转
· 文末祝福 ·
#include<bits/stdc++.h>usingnamespacestd;intmain(){cout<<"跟着王老师一起学习信奥赛C++";cout<<" 成就更好的自己! ";cout<<" csp信奥赛一等奖属于你! ";return0;}