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

5道单选+5道多选+4道编程
一、单选题
-
在计算驼队行进时间时,已知里程
distance(整数)和速度speed(浮点数),下列选项中能正确计算所需时间(小时,浮点数)的是( )。A.
int time = distance / speed;B.
float time = distance / speed;C.
int time = (float)distance / speed;D. 上都不对
-
在丝绸纺织图案中,需要判断一个整数
pattern是否为偶数。以下条件表达式正确的是( )。A.
pattern % 2 = 0B.
pattern // 2 == 0C.
pattern % 2 == 0D.
pattern / 2 == 0 -
敦煌壁画修复中,使用一维数组存储8个佛像的修复优先级,数组下标从0开始。要访问第5个佛像的优先级,正确的写法是( )。
A.
priority[5]B.
priority[4]C.
priority(5)D.
priority[6] -
商队从敦煌到撒马尔罕,途中需要停留补给的次数
stop满足:当剩余水量water小于100且距离下个水源dist大于50时需要停留。下列逻辑表达式正确的是( )。A.
water < 100 && dist > 50B.
water < 100 || dist > 50C.
water < 100 & dist > 50D.
water < 100 and dist > 50 -
在虚拟现实中渲染丝路场景,需要定义一个常量表示大漠风沙速度(固定值3.5)。下列定义正确的是( )。
A.
const double SAND_SPEED = 3.5;B.
const int SAND_SPEED = 3.5;C.
#define SAND_SPEED 3.5D. 以上都不正确
二、多选题
-
关于C++的
if-else语句,下列描述正确的有( )。A.
if后的条件表达式必须用圆括号括起来B.
else子句可以单独使用而不需要前面的ifC. 多个
else if可以连续使用D.
if语句中可以嵌套另一个if语句 -
在计算驼队总载重时,使用以下哪些C++循环结构可以实现对数组
load[100]的所有元素求和?( )A.
for (int i=0; i<100; i++) sum += load[i];B.
int i=0; while(i<100) { sum+=load[i]; i++; }C.
int i=0; do { sum+=load[i]; i++; } while(i<100);D.
foreach(int x in load) sum += x; -
定义函数
int travelTime(int distance, int speed){ },下列选项中正确的有( )。A. 函数的名字是:travelTime
B. 函数的参数有2个
C. 函数没有返回值
D. 函数名字不符合要求
-
丝路货物运输中,需要将重量(斤)从整数转换为浮点数以便计算运费。下列类型转换正确的有( )。
A.
(float)weightB.
float(weight)C.
(double)weightD.
weight * 1.0 -
关于C++数组,下列说法正确的有( )。
A. 数组下标从0开始
B. 定义数组时必须指定长度,且长度必须是常量表达式
C. 数组名代表数组首元素的地址
D. 可以使用
=直接复制另一个数组的全部元素,例如arr2 = arr1;
三、编程题
编程题1:驼队速度计算
背景 :商队从敦煌到楼兰,前半程速度为 v1 里/小时,后半程速度为 v2 里/小时。总路程为 S 里,且前半程和后半程路程相等。请计算平均速度(总路程/总时间),结果保留一位小数。
输入格式 :
一行三个正整数,依次为 v1, v2, S(1 ≤ v1,v2 ≤ 100,2 ≤ S ≤ 2000 且 S 为偶数)。
输出格式 :
一个浮点数,表示平均速度,保留一位小数。
样例输入:
10 15 120
样例输出:
12.0
(解释:半程60里,时间前半60/10=6h,后半60/15=4h,总时间10h,平均速度120/10=12.0)
编程题2:丝绸图案对称性判断
背景 :丝绸图案用一个字符串表示(仅含小写字母)。判断该字符串是否为"回文"(正读反读相同)。
输入格式 :
一行一个字符串 s(长度 1 ≤ |s| ≤ 100)。
输出格式 :
如果字符串是回文,输出 "Yes",否则输出 "No"。
样例输入:
silkklis
样例输出:
Yes
编程题3:文物图像灰度化
背景 :在文物数字化中,一张彩色图像用二维数组表示每个像素的RGB值。现需要将彩色图像转为灰度图,灰度值计算公式:Gray = 0.299*R + 0.587*G + 0.114*B。输入一个 n 行 m 列的图像,每行三个整数 R,G,B(0~255)。输出灰度化后的每个像素的整数值(四舍五入取整)。
输入格式 :
第一行两个整数 n, m(1 ≤ n,m ≤ 20)。
接下来 n 行,每行 m 组三个整数,表示该行每个像素的RGB值。
输出格式 :
输出 n 行,每行 m 个整数,表示灰度值,每个整数后跟一个空格。
样例输入:
2 2
255 0 0 0 255 0
0 0 255 128 128 128
样例输出:
76 150
29 128
(解释:第一行第一列:0.299255≈76.245→四舍五入76;第一行第二列:0.587 255≈149.685→150;第二行第一列:0.114255≈29.07→29;第二行第二列:0.299 128+0.587128+0.114128=128.0→128)
编程题4:丝路驿站最短路径选择
背景 :从敦煌到长安有多条线路,每条线路的驿站数量不同。现有 k 条线路,每条线路给出驿站数量 n i n_i ni 以及该线路上每相邻两个驿站之间的距离(正整数)。请找出总距离最短的那条线路的编号(从1开始编号),并输出其总距离。如果有多个最短线路,输出编号最小的。
输入格式 :
第一行一个整数 k(1 ≤ k ≤ 10)。
接下来依次输入每条线路:先输入一个整数 n i n_i ni( 2 ≤ n i ≤ 50 2 ≤ n_i ≤ 50 2≤ni≤50),表示该线路上的驿站数量;然后输入 n i − 1 n_i - 1 ni−1 个整数,表示相邻驿站之间的距离。
输出格式 :
一行,输出两个整数:最短线路的编号和该线路的总距离,中间用空格隔开。
样例输入:
3
4 10 20 30
3 15 25
5 5 5 5 5
样例输出:
3 20
(解释:线路1总距离60,线路2总距离40,线路3总距离20,最短为线路3,距离20)
参考答案
一、单选题
- B
- C
- B
- A
- A
二、多选题
- A, C, D(B错误,else不能单独使用)
- A, B, C(D在标准C++中不存在)
- A, B(C错误:函数的返回值类型为int,所以有返回值;D错误:函数命名符合规范)
- A, B, C, D(全部正确)
- A, B, C(D错误,数组不能直接复制)
三、编程题参考代码
编程题1
cpp
#include <bits/stdc++.h>
using namespace std;
int main() {
int v1, v2, S; // 定义整数变量:前半程速度,后半程速度,总路程
cin >> v1 >> v2 >> S; // 从输入读取三个正整数
// 计算半程距离,S为偶数,所以除以2.0得到浮点数,避免整数除法截断
double half = S / 2.0;
// 计算前半程所需时间 (时间 = 距离 / 速度)
double time1 = half / v1;
// 计算后半程所需时间
double time2 = half / v2;
// 总平均速度 = 总路程 / 总时间
double avg = S / (time1 + time2);
// 输出结果,fixed表示使用固定小数点表示法,setprecision(1)表示保留1位小数
cout << fixed << setprecision(1) << avg << endl;
return 0;
}
编程题2
cpp
#include <bits/stdc++.h>
using namespace std;
int main() {
string s; // 定义字符串变量,用于存储输入的图案字符串
cin >> s; // 读取字符串
bool ok = true; // 标志位,初始假设字符串是回文
int len = s.length(); // 获取字符串长度
// 只需要比较前半部分和后半部分对应的字符
// 循环到 len/2 即可,避免重复比较
for (int i = 0; i < len / 2; ++i) {
// 如果第i个字符 不等于 倒数第i个字符
if (s[i] != s[len - 1 - i]) {
ok = false; // 发现不对称,标记为false
break; // 无需继续比较,跳出循环
}
}
// 根据结果输出"Yes"或"No"
// 条件运算符 ?: 根据ok的值返回对应的字符串
cout << (ok ? "Yes" : "No") << endl;
return 0;
}
编程题3
cpp
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, m; // n: 图像的行数,m: 图像的列数
cin >> n >> m; // 读取行数和列数
// 循环处理每一行
for (int i = 0; i < n; ++i) {
// 循环处理当前行的每一个像素
for (int j = 0; j < m; ++j) {
int r, g, b; // 定义整型变量,存储红、绿、蓝三个颜色分量
cin >> r >> g >> b; // 读取当前像素的RGB值
// 根据灰度公式计算灰度值,结果是一个浮点数
// round() 函数用于四舍五入取整,返回double类型
int gray = round(0.299 * r + 0.587 * g + 0.114 * b);
// 输出灰度值
cout << gray;
// 如果不是当前行的最后一个像素,则输出一个空格作为分隔
if (j < m - 1) cout << " ";
}
// 当前行处理完毕,输出换行
cout << endl;
}
return 0;
}
编程题4
cpp
#include <bits/stdc++.h>
using namespace std;
int main() {
int k; // 线路的条数
cin >> k; // 读取线路条数
// 初始化最佳线路的信息
int bestIdx = 1; // 最佳线路编号,初始设为第一条线路
int bestDist = INT_MAX;; // 最佳线路的总距离,初始为无穷大
// 循环处理每一条线路,i从1开始,方便记录线路编号
for (int i = 1; i <= k; ++i) {
int n; // 当前线路的驿站数量
cin >> n; // 读取驿站数量
int total = 0; // 累加当前线路的总距离,初始为0
// 一条线路有n个驿站,则有 n-1 段距离
for (int j = 1; j <= n - 1; ++j) {
int d; // 相邻驿站之间的距离
cin >> d; // 读取一段距离
total += d; // 累加到总距离中
}
// 判断是否为更优的线路
// 当前线路的总距离小于已记录的最佳距离
if (total < bestDist) {
bestDist = total; // 更新最佳距离
bestIdx = i; // 更新最佳线路编号
}
// 注意:题目要求如果有多个最短线路,输出编号最小的。
// 这里使用 "total < bestDist" 而不是 "<=" 确保了当距离相同时,
// 不会用后面的线路覆盖前面的,因此编号最小的会被保留。
}
// 输出结果:最佳线路编号和该线路的总距离,中间用空格隔开
cout << bestIdx << " " << bestDist << endl;
return 0;
}
关注老师的专栏,查看完整版全国青少年信息素养大赛C++备赛资料(初赛+复赛):
https://blog.csdn.net/weixin_66461496/category_12969975.html
各种学习资料,助力大家一站式学习和提升!!!
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信奥赛冲刺一等奖有效刷题题解:
CSP信奥赛C++初赛及复赛高频考点真题解析(持续更新): 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;
}
