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 名志愿者参加庆典活动,需排成矩形队列满足:

  1. 共 A 行(输入给定的行数);
  2. 每行志愿者人数相同;
  3. 可不安排所有志愿者(允许部分不参与排列)。
    目标:计算每行最多能安排的志愿者人数。

输入要求:

  • 两个整数 n 和 A(空格隔开),满足:
    • ( 2 ≤ n ≤ 500 2 \leq n \leq 500 2≤n≤500)(志愿者总数)
    • ( 2 ≤ A ≤ n 2 \leq A \leq n 2≤A≤n)(行数)

输出要求:

  • 每行最多能安排的志愿者人数。

示例:
输入:50 11
输出:4
解释:

  • 每行 4 人:( 4 × 11 = 44 ≤ 50 4 \times 11 = 44 \leq 50 4×11=44≤50)(可行)
  • 每行 5 人:( 5 × 11 = 55 > 50 5 \times 11 = 55 > 50 5×11=55>50)(不可行)

编程题第2题: 茶具套装组合

题目描述:
给定茶壶、盖碗、茶漏、茶杯的库存数量,计算最多能组成的完整茶具套装数量。
套装要求:

  • 1 个茶壶
  • 1 个盖碗
  • 1 个茶漏
  • 4 个茶杯

输入要求:

  • 4 个整数(范围 ( 0 ≤ 整数 ≤ 100 0 \leq \text{整数} \leq 100 0≤整数≤100)),空格隔开,依次表示:
    1. 茶壶数量
    2. 盖碗数量
    3. 茶漏数量
    4. 茶杯数量

输出要求:

  • 最多能组成的完整套装数量。

示例:
输入:3 4 2 13
输出:2
解释:

  • 每套需要4个茶杯,因此茶杯最多支持 13 ÷ 4 = 3 13 \div 4 = 3 13÷4=3 套(取整后为3套)
  • 但茶漏仅2个,限制为 2 套
  • 最终以最小限制为准,输出 2 套

编程题第3题: 平衡奇偶位置的字符交换

题目描述:
给定仅含 'A' 和 'B' 的字符串 s,每次可交换相邻字符。要求通过最少交换次数满足:

  • 奇数位置(从 1 开始)的 'A' 数量 等于 偶数位置的 'A' 数量。
    若无法满足,返回 -1。

输入要求:

  • 字符串 s( 2 ≤ ∣ s ∣ ≤ 1 0 5 2 \leq |s| \leq 10^5 2≤∣s∣≤105),仅含 'A' 和 'B'。

输出要求:

  • 最少交换次数;若无法满足,输出 -1。

示例:
输入:"AABABA"
输出:1
解释:

  • 交换位置 2 和 3 后:奇数位置 'A' = 2,偶数位置 'A' = 2。

编程题第4题: 矩阵圈层交错旋转

题目描述:
对 (n × \times × n) 矩阵的每一圈层进行顺时针/逆时针交替旋转:

  1. 圈层定义:
    • 从外到内逐层编号(最外层为第 1 层)。
    • 若 (n) 为奇数,中心元素不旋转。
  2. 旋转方向:
    • 奇数层:顺时针旋转 90°
    • 偶数层:逆时针旋转 90°

输入要求:

  1. 第一行:整数 (n)( 2 ≤ n ≤ 100 2 \leq n \leq 100 2≤n≤100)。
  2. 接下来 (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) 个)中轮流取硬币:

  1. Jerry 先手,从盒子 1 开始取至少 1 枚。
  2. 限制:
    • 若上一玩家取了盒子 i ,当前玩家必须取盒子 i+1 (盒子 n 后接盒子 1)。
  3. 失败条件:轮到玩家时需取的盒子为空。

输入要求:

  1. 第一行:整数 T ( 1 ≤ T ≤ 100 1 \leq T \leq 100 1≤T≤100,测试组数)。
  2. 每组数据:
    • 第一行:整数 (n)(盒子数量)。
    • 第二行:n 个整数 a i a_i ai​(每个盒子的硬币数)。

输出要求:

  • 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 ≤ 100 1 \leq n \leq 100 1≤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

更多推荐