#YDSPJ2025. 2025 云斗学院软件能力认证第一轮(YDSP-Junior)入门级 C++ 语言试题

2025 云斗学院软件能力认证第一轮(YDSP-Junior)入门级 C++ 语言试题


一、单项选择题(每题 2 分,共 30 分)

  1. 报名 CSP-J 第一轮的选手,需要在当年的 9 月 1 日满( )周岁。 {{ select(1) }}
  • 8
  • 10
  • 12
  • 14
  1. 下面四条 C++ 语句中,( )不是正确的声明变量语句。 {{ select(2) }}
  • long long ago;
  • double kill;
  • int eger;
  • define the,world;
  1. Alice 使用 C++ 编写了一款小程序,代码文件为 game.cpp,并使用软件 DEV-C++ 生成了可执行文件 game.exe,并创建了快捷方式“井字棋”。这天,Bob 想要用 U 盘拷走 Alice 的游戏。Alice 应该把( )拷进 Bob 的 U 盘,才能让 Bob 直接游玩。 {{ select(3) }}
  • game.cpp
  • DEV-C++
  • game.exe
  • 井字棋
  1. 现在有 int 类型的变量 x,保证 0 ≤ x ≤ 100,现要判断一个自然数 x 是不是 8 的倍数,下列 C++ 表达式正确的是( )。 {{ select(4) }}
  • x&7==0
  • (x&-x)>7
  • (x|7)==0
  • x%(2^3)==0
  1. 考虑两个十进制正整数 x, y,其中 xn 位数,ym 位数,x ≥ y。那么( )。 {{ select(5) }}
  • x, y 的最高位如果不同,那么 x 的最高位数值更大。
  • x + yn 位数或 n + 1 位数。
  • x − yn 位数或 n − 1 位数。
  • xynm 位数。
  1. 一棵二叉树的前序遍历是 ECDAHBIGF,中序遍历是 DCHBIAEGF,则其后序遍历是( )。 {{ select(6) }}
  • DIBHACFGE
  • DHBIACGFE
  • GFAHBIDCE
  • EGFCAHBID
  1. 我们知道,01 背包问题是指:有 n 个物品,每个物品有重量 w_i 和价值 v_i,要选出一部分物品使得重量和不超过给定值 W,然后最大化选出物品的价值和。一个常见错误做法是贪心地按照物品性价比从高到低排序,然后从前往后装入背包,直到无法装入下一个物品。事实上,当 n = 2, W = 10, w1 = 5, v1 = 10 时,只要令( )就可以让这个做法得到错误结果。 {{ select(7) }}
  • w2 = 3, v2 = 8
  • w2 = 6, v2 = 13
  • w2 = 8, v2 = 18
  • w2 = 7, v2 = 12
  1. Alice 和 Bob 正在复习 CSP-J 知识点。 Alice:“一个栈可以用( )实现,且可以做到单个元素入栈、出栈均为 O(1)。” Bob:“不对,如果用这个实现,入栈 O(1),出栈就做不到 O(1)。” 已知 Bob 这句话是对的,判断横线处应该填( )。 {{ select(8) }}
  • std::vector
  • std::list
  • std::stack
  • std::queue
  1. 现有一个 n 项的数组 a[1], …, a[n],保证 a[0] = 0。 如果要原地求前缀和,应该写 for(/* Blank 1 /) a[i] += a[i-1]; 如果要原地求差分,应该写 for(/* Blank 2 */) a[i] -= a[i-1]; 给出正向循环 int i=1;i<=n;i++ 和反向循环 int i=n;i>0;i--。序号处应分别填写( )。 {{ select(9) }}
  • 正向循环、正向循环
  • 正向循环、反向循环
  • 反向循环、正向循环
  • 反向循环、反向循环
  1. 我们规定,对于一个三位数(可以有前导 0,即 000∼999),如果其含有数码 2,3,4,5,7,那么其不可倒置;否则其倒置的结果可以通过:①把数码 9↔6 同时互换;②交换百位与个位。若一个三位数不可倒置或倒置后与原数相同,则称为安全。一共有( )个安全的三位数。 {{ select(10) }}
  • 890
  • 875
  • 900
  • 925
  1. 计算 (2025)_8 + (920)_{10} 的结果是( )。 {{ select(11) }}
  • (11110101101)_2
  • (3665)_8
  • (1935)_{10}
  • (7AB)_{16}
  1. 后缀表达式 2 4 * 7 - 1 2 + * 的计算结果为( )。 {{ select(12) }}
  • 1
  • 2
  • 3
  • 4
  1. 对序列 2, 0, 2, 5, 0, 9, 2, 0 进行升序冒泡排序的过程中,一共发生了( )次“交换第 4 个和第 5 个数”。 {{ select(13) }}
  • 1
  • 2
  • 3
  • 4
  1. 不能写成两个合数之和的最大自然数 n 是( )。 {{ select(14) }}
  • 2
  • 7
  • 9
  • 11
  1. 一棵 2025 个结点的无根无权树中,所有无序点对距离和的最大值除以 7 的余数是( )。 {{ select(15) }}
  • 1
  • 2
  • 3
  • 4

二、阅读程序(无特殊说明时判断 1.5 分,选择 3 分,3 题共 40 分)

第 1 题(12 分)

判断题

  1. 该程序的功能是将一个数依据某一规则转化为某个合数。 {{ select(16) }}
  • 正确
  • 错误
  1. 输入 3 675 时,输出为 65。 {{ select(17) }}
  • 正确
  • 错误
  1. 输入 4 2048 时,输出为 0。 {{ select(18) }}
  • 正确
  • 错误

选择题

  1. 输入 12 379379379379 时,输出为( )。 {{ select(19) }}
  • 33
  • 99
  • 9
  • 77
  1. 输入 40 2373737373737373737373737373737373737373 时,输出为( )。 {{ select(20) }}
  • 27
  • 23
  • 77
  • 33
  1. 某两次输出结果的和为 26,且第一次输出为一位数,则第一次输出可能为( )。 {{ select(21) }}
  • 0
  • 1
  • 6
  • 8

第 2 题(13 分)

判断题

  1. 若输入数组 a 中所有元素均为 0,则程序输出的 ans 为 0。 {{ select(22) }}
  • 正确
  • 错误
  1. 若将第 14–22 行的循环改为从 i=1 开始到 i<=n,程序输出结果不改变。 {{ select(23) }}
  • 正确
  • 错误

选择题

  1. 当输入为 42025 2025 -2025 -2025 时,输出为( )。 {{ select(24) }}
  • 0
  • 2025
  • 4050
  • 8100
  1. 当输入为 51 2 3 4 5 时,输出为( )。 {{ select(25) }}
  • 4
  • 10
  • 16
  • 22

26.(4 分)若将第 16 行改为 x = x + 2 * a[i];,输入 33 1 2 时,输出为( )。 {{ select(26) }}

  • 8
  • 36
  • 14
  • 18

第 3 题(15 分)

判断题

  1. 本程序的时间复杂度为 O(1)。 {{ select(27) }}
  • 正确
  • 错误
  1. 输入 5 3 3 0 02 6 6 6 8 时,运行第 27 行后,max_2 - min_2 = 5。 {{ select(28) }}
  • 正确
  • 错误

选择题

29.(2.5 分)若 a = b = c = d = 10,输出为 1,则 n 的最小值为( )。 {{ select(29) }}

  • 27
  • 28
  • 29
  • 30
  1. 实际上,当 λ * n < a + b + c + dλ 是参数)时,即可直接输出 0λ 的最小值为( )。 {{ select(30) }}
  • 2
  • 3
  • 4
  • 5
  1. 若输入的 len = [2, 4, 6, 6, 6, 6, 8, 8]c = 0d = 0,且 a,b 均在 [0,9] 内随机均匀取值,则输出为 1 的概率为( )。 {{ select(31) }}
  • 0.37
  • 0.38
  • 0.39
  • 0.40

32.(4 分)若输入 n = 9, b = 6, c = 0, d = 0,且所有 len 的总和为 40,并满足 len ∈ {2,4,6},假定 len 单调不降,则所有可能使输出为 1 的输入种数为( )。 {{ select(32) }}

  • 25
  • 26
  • 27
  • 28

三、完善程序(共两题 30 分)

3.1 反色编码(15 分)

  1. /* Blank 1 */ 应填( )。 {{ select(33) }}
  • int
  • void
  • char
  • inline
  1. /* Blank 2 */ 应填( )。 {{ select(34) }}
  • return a + b * 16
  • return a + b % 16
  • return a * 16 + b
  • return
  1. /* Blank 3 */ 应填( )。 {{ select(35) }}
  • n % 16
  • n - 16 * a + 1
  • (n + 1) % 16
  • (n + 1) / 16
  1. /* Blank 4 */ 应填( )。 {{ select(36) }}
  • for(int i = 1; i <= 7; i++)
  • for(int i = 0; i < 6; i++)
  • for(int j = 0; j < 6; j++)
  • for(int i = 0; i < 6; i += 2)
  1. /* Blank 5 */ 应填( )。 {{ select(37) }}
  • to_t_o(255 - to_t_o(c[i-1], c[i]))
  • to_t_o(255 - to_t_t(c[i-1], c[i]))
  • to_t_t(255 - to_t_t(c[i-1], c[i]))
  • to_t_t(255 - to_t_o(c[i-1], c[i]))

3.2 相通变换(15 分)

  1. /* blank 1 */ 应填( )。 {{ select(38) }}
  • i < n / i
  • i * i < n
  • i * i <= n
  • i < sqrt(n)
  1. /* blank 2 */ 应填( )。 {{ select(39) }}
  • sum - max_val
  • sum / max_val
  • max_val
  • sum
  1. /* blank 3 */ 应填( )。 {{ select(40) }}
  • x % a[i]
  • a[i] - x
  • a[i] / x
  • a[i] % x
  1. /* blank 4 */ 应填( )。 {{ select(41) }}
  • min(rem[l], rem[r])
  • min(rem[l], x - rem[r])
  • max(rem[l], rem[r])
  • min(x, rem[r])
  1. /* blank 5 */ 应填( )。 {{ select(42) }}
  • l += (rem[l] == 0)
  • while(!rem[l]) l++
  • l -= (rem[l] > 0)
  • while(rem[l]) l--