考试时间:60 分钟 满分:100 分
适用:小学组|算法应用主题赛
版本:2026 初赛(丝路新程)
内容:试题 + 答案 + 详细解析
用途:备考刷题、复习巩固、赛前训练
【智能电表】丝路新程的智能电表每 3 秒记录一次能耗。以下程序模拟了前 10 秒的能耗累加过程(第 0 秒开始)。请问程序最终输出什么?
1 2 3 4 5 6 7 8 9 10 11 12 13 #include <bits/stdc++.h>using namespace std;int main() { int energy = 0; for (int time = 0; time < 10; time += 3) { if (time % 2 == 0) energy += 2; else energy += 1; } cout << energy << endl; return 0;}
A. 8 B. 6 C. 10 D. 12
✅ 正确答案:B
解析:time 取 0、3、6、9。
0(偶)+2;3(奇)+1;6(偶)+2;9(奇)+1。总和:2+1+2+1=6。
【管网压力】在丝路新程的管网压力测试中,使用了以下递归函数计算压力值。当输入 n=5 时,func (5) 的返回值是多少?
1 2 3 4 5 int func(int n) { if (n <= 1) return n; if (n % 2 == 0) return func(n / 2) + 1; else return func(n - 1) + 1;}
A. 4 B. 5 C. 6 D. 7
✅ 正确答案:B
解析:func (5)=func (4)+1 → func (4)=func (2)+1 → func (2)=func (1)+1 → func (1)=1。
计算:1+1+1+1=4。
【物流排序】新程物流中心对包裹重量进行排序。阅读以下代码,数组 a 经过处理后,a [1] 的值是多少?
1 2 3 4 5 6 7 8 9 #include <algorithm>int a[] = {0, 5, 2, 8, 1}; // a[0]闲置,使用1-4int main() { std::sort(a + 1, a + 5); a[1] *= 2; std::sort(a + 2, a + 5); std::cout << a[1]; return 0;}
A. 2 B. 4 C. 5 D. 8
✅ 正确答案:B
解析:第一次排序后:0 1 2 5 8 → a [1]=1×2=4 → 数组变为 0 4 2 5 8 → 只排 2~4 位不影响 a [1],结果为4。
【单车调度】丝路新程的共享单车调度车需要在电量耗尽前服务尽可能多的站点。每个站点有服务耗电量 e [i],调度车总电量为 E=20。以下贪心策略选出的站点数量是多少?
1 2 3 4 5 6 7 8 9 10 11 12 13 int e[] = {0, 8, 3, 5, 9, 2}; // 站点1-5的耗电量int main() { int E = 20, count = 0; // 已按e[i]升序排序:2, 3, 5, 8, 9 for (int i = 5; i >= 1; i--) { if (E >= e[i]) { E -= e[i]; count++; } } cout << count; return 0;}
A. 3 B. 4 C. 5 D. 2
✅ 正确答案:D
解析:循环从大到小取:9→8→5 不够。仅取 9、8,count=2。
【二进制通信】在新程的二进制通信协议中,以下函数用于计算数据包中 “1” 的个数。countOnes (23) 的返回结果是?
1 2 3 4 5 6 7 8 int countOnes(int n) { int cnt = 0; while (n) { cnt++; n = n & (n - 1); // 清除最低位的1 } return cnt;}
A. 2 B. 3 C. 4 D. 5
✅ 正确答案:B
解析:23 二进制 10111,含3个 1。
【地下迷宫】丝路新程的地下迷宫是一个 4x4 网格。以下 DFS 代码用于统计从 (1,1) 到 (4,4) 的路径数量(只能向右或向下)。请问 paths 的最终值是多少?
1 2 3 4 5 6 7 8 9 10 int paths = 0;void dfs(int x, int y) { if (x == 4 && y == 4) { paths++; return; } if (x < 4) dfs(x + 1, y); if (y < 4) dfs(x, y + 1);}// main中调用 dfs(1, 1);
A. 6 B. 10 C. 20 D. 14
✅ 正确答案:C
解析:4×4 网格从 (1,1) 到 (4,4) 需向下 3 次、向右 3 次,组合数 C (6,3)=20。
【绿化覆盖率】新程规划局计算最佳绿化覆盖率。以下代码是简化版的 DP 过程。请问数组 dp [4] 的值是多少?
1 2 3 4 5 6 7 8 9 10 int dp[5] = {0};int w[] = {0, 2, 1, 3, 2};int main() { for (int i = 1; i <= 4; i++) { dp[i] = dp[i-1] + w[i]; if (i >= 2) dp[i] = max(dp[i], dp[i-2] + w[i] * 2); } cout << dp[4]; return 0;}
A. 10 B. 11 C. 12 D. 13
✅ 正确答案:A
解析:dp [1]=2;dp [2]=max (3, 0+1*2)=3;dp [3]=max (6, 2+6)=8;dp [4]=max (10, 3+2*2)=10。
【信号灯控制】在交通信号灯控制系统中,使用了指针操作。请问以下程序的输出结果是?
1 2 3 4 5 6 7 8 9 10 void control(int *a, int &b) { // 控制函数:a 是指针传参,b 是引用传参 *a = *a + b; // 修改原变量 x b = *a - b; // 修改原变量 y(引用,不用传地址也能改)}int main() { int x = 10, y = 5; control(&x, y); // 调用函数:x 传地址,y 传引用 cout << x << " " << y; return 0;}
A. 15 5 B. 15 10 C. 10 15 D. 20 5
✅ 正确答案:B
解析:*a=10+5=15;b=15-5=10。输出:15 10。
【车牌识别】新程的车牌识别系统需要过滤非法字符。以下程序处理字符串 "S1R0C2T",输出结果的长度是多少?
1 2 3 4 5 6 7 8 9 10 11 12 13 #include <string>using namespace std;int main() { string s = "S1R0C2T";string t = ""; for (char c : s) { if (c >= 'A' && c <= 'Z') { t += c; } }cout << t.length();return 0;}
A. 3 B. 4 C. 5 D. 7
✅ 正确答案:B
解析:保留大写字母:S、R、C、T,共4个。
【货物排序】物流中心对货物按优先级排序。阅读以下代码,排序后 cargo [2].id 的值是多少?
1 2 3 4 struct Item { int id, priority; };Item cargo[4] = {{0,0}, {1, 3}, {2, 1}, {3, 2}};bool cmp(Item a, Item b) { return a.priority > b.priority; }// sort(cargo+1, cargo+4, cmp);
A. 1 B. 2 C. 3 D. 无法确定
✅ 正确答案:C
解析:按优先级降序:id1 (3)、id3 (2)、id2 (1)。cargo [2].id=3。
【标签匹配】在检查新程 XML 配置文件的标签匹配时,使用了栈结构。对于字符串 "<<>>",以下代码的输出是什么?
1 2 3 4 5 6 7 8 #include <stack>std::stack<char> st;std::string s = "<<>>";for (char c : s) { if (c == '<') st.push(c); else if (c == '>' && !st.empty()) st.pop();}if (st.empty()) cout << "Match"; else cout << "Error";
A. Match B. Error C. 无输出 D. 编译错误
✅ 正确答案:A
解析:入栈 2 次,出栈 2 次,栈空,输出Match。
【户籍查找】在庞大的新程户籍数据库中查找特定 ID。以下二分查找代码查找 target=15,变量 steps 记录了循环次数,其最终值是多少?
1 2 3 4 5 6 7 8 int arr[] = {5,10,15,20,25};int target=15, steps=0;int left=0, right=4;while(left<=right){ steps++; int mid=(left+right)/2; if(arr[mid]==target) break;}
A. 1 B. 2 C. 3 D. 4
✅ 正确答案:A
解析:第一次 mid=2,直接找到,steps=1。
【管廊铺设】丝路新程的地下管廊铺设光缆,只能向右或向下移动,动态规划计算最小成本,横线处应填入的代码是?
1 dp[i][j] = grid[i][j] + _______________;
A. min(dp[i-1][j], dp[i][j-1])
B. max(dp[i-1][j], dp[i][j-1])
C. dp[i-1][j] + dp[i][j-1]
D. min(dp[i-1][j-1], dp[i][j])
✅ 正确答案:A
解析:最小路径取上方与左方的最小值。
【安防系统】丝路新程的安防系统逻辑门判断。以下程序的输出结果是?
1 2 3 4 5 int a=1,b=0,c=1;if((a&&b)||(b&&c)||(a&&c)){ if(!(a||b||c)) cout<<"Safe"; else cout<<"Warning";}else cout<<"Normal";
A. Safe B. Warning C. Normal D. 无输出
✅ 正确答案:B
解析:外层条件为真,内层条件为真,输出Warning。
【人口增长】模拟新程人口增长模型。初始人口 P=1000,每年增长 5%。请问 3 年后人口 P 的值是多少?
1 2 int P = 1000;for(int i=0;i<3;i++) P = P + P / 20;
A. 1150 B. 1157 C. 1160 D. 1200
✅ 正确答案:B
解析:1000→1050→1102→1157。
在 C++ 中,const 成员函数内部不能修改对象的任何非 mutable 成员变量的值。()
✅ 正确答案:√
解析:const 成员函数禁止修改普通成员变量。
已知大写字符 A 的 ASCII 十六进制为 0x41,字符 m 的 ASCII 八进制为 155。()
✅ 正确答案:√
解析:'A'=65,'m'=109,十进制 109 转八进制(除8倒排) =155。
std::vector 的 push_back 空间不足时自动重分配,均摊时间复杂度为 O (1)。()
✅ 正确答案:√
解析:vector 扩容为指数增长,均摊 O (1)。
深度优先搜索(DFS)通常使用队列(Queue)作为辅助数据结构来实现。()
✅ 正确答案:×
解析:DFS 用栈,BFS 用队列。
#include 包含的头文件在编译前会被复制到源文件中,因此会增加编译后的可执行文件的大小。()
✅ 正确答案:×
解析:头文件不直接生成指令,不增加可执行文件大小。
学习编程知识
锻炼逻辑思维
让自己变得更优秀
欢迎同学们组队
学习 C++
感受不一样的程序人生
成为新时代的领军人物
感谢您关注
信奥科创工作室
官方微信

期待您的分享 点赞 在看