2025第十六届蓝桥杯大赛青少组省赛C++真题(初级组和中级组)
2025第十六届蓝桥杯大赛青少组省赛C++真题(初级组和中级组)
选择题:第1题
运行以下程序,输出的结果是( )。
int func(int y) {y -= 5;cout << "x";return 0;
}int main() {int x = 10, y = 5;if (x > y || func(y))cout << y;return 0;
}
- A X0
- B X5
- C 5
- D 0
选择题:第2题
运行以下程序,输出的结果是( )。
int i = 1, t = 0;
while (i * i < 30) {t += i;i += 2;
}
cout << t;
- A 3
- B 4
- C 9
- D 16
选择题:第3题
运行语句 cout << (char)('F' + 4);
的结果是( )。
- A I
- B j
- C K
- D J
选择题:第4题
下列选择中,优先级最高的是( )。
- A +
- B -
- C *
- D =
选择题:第5题
关于 C++ 中的 new
和 delete
关键字,以下说法错误的是( )。
- A 使用
new int[10]
分配的数组内存必须使用delete[]
释放 - B
int *p = new int;
分配的整型内存默认会被初始化为 0 - C 对空指针
nullptr
使用delete
是安全的,不会引发错误 - D
new
在内存分配失败时默认输出std::bad_alloc
异常,而非返回空指针
编程题第1题: 庆典队列
题目描述:
有 n
名志愿者参加庆典活动,需排成矩形队列满足:
- 共
A
行(输入给定的行数); - 每行志愿者人数相同;
- 可不安排所有志愿者(允许部分不参与排列)。
目标:计算每行最多能安排的志愿者人数。
输入要求:
- 两个整数
n
和A
(空格隔开),满足:- (2≤n≤5002 \leq n \leq 5002≤n≤500)(志愿者总数)
- (2≤A≤n2 \leq A \leq n2≤A≤n)(行数)
输出要求:
- 每行最多能安排的志愿者人数。
示例:
输入:50 11
输出:4
解释:
- 每行 4 人:(4×11=44≤504 \times 11 = 44 \leq 504×11=44≤50)(可行)
- 每行 5 人:(5×11=55>505 \times 11 = 55 > 505×11=55>50)(不可行)
编程题第2题: 茶具套装组合
题目描述:
给定茶壶、盖碗、茶漏、茶杯的库存数量,计算最多能组成的完整茶具套装数量。
套装要求:
- 1 个茶壶
- 1 个盖碗
- 1 个茶漏
- 4 个茶杯
输入要求:
- 4 个整数(范围 (0≤整数≤1000 \leq \text{整数} \leq 1000≤整数≤100)),空格隔开,依次表示:
- 茶壶数量
- 盖碗数量
- 茶漏数量
- 茶杯数量
输出要求:
- 最多能组成的完整套装数量。
示例:
输入:3 4 2 13
输出:2
解释:
- 每套需要4个茶杯,因此茶杯最多支持 13÷4=313 \div 4 = 313÷4=3 套(取整后为3套)
- 但茶漏仅2个,限制为 2 套
- 最终以最小限制为准,输出 2 套
编程题第3题: 平衡奇偶位置的字符交换
题目描述:
给定仅含 'A'
和 'B'
的字符串 s
,每次可交换相邻字符。要求通过最少交换次数满足:
- 奇数位置(从 1 开始)的
'A'
数量 等于 偶数位置的'A'
数量。
若无法满足,返回-1
。
输入要求:
- 字符串
s
(2≤∣s∣≤1052 \leq |s| \leq 10^52≤∣s∣≤105),仅含'A'
和'B'
。
输出要求:
- 最少交换次数;若无法满足,输出
-1
。
示例:
输入:"AABABA"
输出:1
解释:
- 交换位置 2 和 3 后:奇数位置
'A'
= 2,偶数位置'A'
= 2。
编程题第4题: 矩阵圈层交错旋转
题目描述:
对 (n ×\times× n) 矩阵的每一圈层进行顺时针/逆时针交替旋转:
- 圈层定义:
- 从外到内逐层编号(最外层为第 1 层)。
- 若 (n) 为奇数,中心元素不旋转。
- 旋转方向:
- 奇数层:顺时针旋转 90°
- 偶数层:逆时针旋转 90°
输入要求:
- 第一行:整数 (n)(2≤n≤1002 \leq n \leq 1002≤n≤100)。
- 接下来 (n) 行:每行 (n) 个整数(−1000≤整数≤1000-1000 \leq \text{整数} \leq 1000−1000≤整数≤1000)。
输出要求:
- 输出旋转后的矩阵(每行整数空格隔开)。
示例:
输入:
4
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
输出:
13 9 5 1
14 7 11 2
15 6 10 3
16 12 8 4
解释:
- 第 1 层(最外层)顺时针旋转 90°。
- 第 2 层(内层)逆时针旋转 90°。
编程题第5题: 环形取硬币游戏
题目描述:
Jerry 和 Tom 在环形盒子(共 (n) 个)中轮流取硬币:
- Jerry 先手,从盒子 1 开始取至少 1 枚。
- 限制:
- 若上一玩家取了盒子 i ,当前玩家必须取盒子 i+1 (盒子 n 后接盒子 1)。
- 失败条件:轮到玩家时需取的盒子为空。
输入要求:
- 第一行:整数 T (1≤T≤1001 \leq T \leq 1001≤T≤100,测试组数)。
- 每组数据:
- 第一行:整数 (n)(盒子数量)。
- 第二行:n 个整数 aia_iai(每个盒子的硬币数)。
输出要求:
- T 行,每行为
"Jerry"
或"Tom"
(获胜者)。
示例:
输入:
2
1
10
2
30 50
输出:
Jerry
Tom
解释:
- (n=1):Jerry 取完硬币,Tom 失败。
- (n=2):Tom 通过最优策略获胜。
编程题第6题: 魔术扑克牌排列 (中级组多一题)
题目描述:
混合 (n) 张红牌和 (n) 张蓝牌后叠放。嘉宾从顶部连续取任意张牌(至少 1 张,最多 (2n) 张),需满足:
- 任意取牌方案中,红牌数量 ≥ 蓝牌数量。
求满足条件的排列总数。
输入要求:
- 整数 n(1≤n≤1001 \leq n \leq 1001≤n≤100)。
输出要求:
- 输出一个整数,表示满足条件的排列总数。
示例:
输入:n = 3
输出:5
解释:
- 满足条件的 5 种排列(
R
红牌,B
蓝牌):
i.R R B R B B
ii.R B R B R B
iii.R B R B B B
iv.R R B B B B
v.R R B B R B
文末福利: csp信奥赛c++复赛集训课(12大高频考点专题集训)
课程直通链接:
https://edu.csdn.net/course/detail/40437