GESP2025年9月认证C++五级真题与解析(单选题9-15)


🌟 第 9 题:唯一分解定理------数字的"身份证"


(1)🧸 小故事

每个小朋友都有 唯一的身份证号 🪪

👉 不管你怎么写、怎么拆

👉 这个身份证只属于你一个人

整数也一样,每个整数都有一份 唯一的"素数身份证"


(2)📘 题目

唯一分解定理描述的是( )

A. 每个整数都能表示为任意素数的乘积

B. 每个大于 1 的整数能唯一分解为素数幂乘积(忽略顺序)

C. 合数不能分解为素数乘积

D. 素数只有两个因子:1 和自身


(3)🧠 核心理解

60 为例:

cpp 复制代码
60 = 2 × 2 × 3 × 5
   = 2² × 3 × 5

👉 顺序可以乱

👉 但 用哪些素数、各自用几次,是唯一的


(4)✅ 正确答案:B

⚠️ 易错点:

  • D 是"素数定义",不是唯一分解定理

  • A 的"任意"是错的!



🌟 第 10 题:在有序矩阵里找第 k 小的数 🔍


(1)🧸 小故事

小明有一张 魔法棋盘 ♟️

  • 每一行从左到右越来越大

  • 每一列从上到下越来越大

老师问:

👉 第 k 小的数字是谁?


(2)📘 解题思路(不用一个个数)

👉 用 二分答案 + 统计 ≤ x 的个数

核心循环:

cpp 复制代码
while (lo < hi) {
    int mid = (lo + hi) / 2;
    if (countLE(matrix, mid) >= k)
        hi = mid;
    else
        lo = mid + 1;
}

(3)🧠 为什么这样写?

  • countLE(mid):看看 ≤ mid 的数够不够 k 个

  • 够了 → 答案可能更小

  • 不够 → 答案要更大


(4)✅ 正确答案:C

⚠️ 易错点:

  • 这里是 找"最小满足条件的值"

  • 所以是 hi = mid,不是 mid - 1



🌟 第 11 题:快速排序的"坏脾气"


(1)🧸 小故事

快速排序像一个爱分组的老师 👩‍🏫

  • 每次选一个"基准"

  • 把小的放左边,大的放右边

但如果老师 每次都选最倒霉的那个 😅......


(2)📘 题目问

下列关于快速排序的说法,哪一个是错误的?


(3)🧠 关键点

  • 快排 平均 很快(O(n log n))

  • 最坏情况 会退化成 O(n²)

  • partition 中左右扫描顺序 不能随便换


(4)❌ 错误说法

👉 D :扫描顺序可以交换 ❌

(交换会破坏算法逻辑)


✅ 正确答案:D



🌟 第 12 题:归并排序------合并阶段的小细节 🧩


(1)🧸 小故事

两队已经排好序的小朋友 👧👦

老师要把他们 合成一支更大的有序队伍


(2)📘 关键代码

cpp 复制代码
while (j <= right) {
    tmp[k++] = nums[j++];
}

(3)🧠 为什么是 j <= right

  • 右半部分是 [mid+1, right]

  • 一个都不能漏!


(4)✅ 正确答案:D

⚠️ 常见错误:

  • 写成 < right → 最后一个丢了


🌟 第 13 题:电影院排片------贪心算法登场 🎬


(1)🧸 小故事

你是电影院经理 🎟️

只有一个厅,要放 最多不重叠的电影

你该怎么选?


(2)🧠 贪心策略

👉 结束时间早的电影先放!


排序规则

cpp 复制代码
return a[1] < b[1];   // 按结束时间

更新 lastEnd

cpp 复制代码
lastEnd = movies[i][1];

(3)✅ 正确答案:B

📌 贪心口诀:

能早结束,就早结束

给后面的留空间



🌟 第 14 题:最大子数组和------这是哪种算法?


(1) 🧸 小故事

小明在一条路上捡金币 💰

有些地方是金币,有些是陷阱

👉 要选 一段连续路,金币最多!


(2) 📘 题目代码特点

  • 分左右

  • 算中间

  • 用递归


(3) 🧠 算法本质

✔ 分治算法

❌ 不是贪心(虽然也有贪心解法)


(4) ❌ 错误说法

👉 B:采用贪心算法


(5) ✅ 正确答案:B



🌟 第 15 题:大整数 +1(进位的艺术) ➕


(1)🧸 小故事

数字是这样存的:

cpp 复制代码
[1, 2, 9]

表示 129

现在要 +1 🎉


(2)🧠 正确思路

  • 从最后一位开始

  • 遇到 9 → 变 0,继续进位


(3)正确代码

cpp 复制代码
digits[i] = 0;

(4)❌ 错误写法

  • 设成 9

  • 设成 10

  • 设成 1


(5)✅ 正确答案:A


相关推荐
飞鹰512 小时前
CUDA高级优化实战:Stream、特殊内存与卷积优化—Week3学习总结
c++·gpt·chatgpt·gpu算力
lihao lihao2 小时前
c++红黑树
算法
Sarvartha2 小时前
递推与递归笔记
算法
TracyCoder1232 小时前
LeetCode Hot100(1/100)——1. 两数之和 (Two Sum)
算法·leetcode
进击的小头2 小时前
常用数字滤波器的特性与适用场景
c语言·算法
狐573 小时前
2026-01-19-LeetCode刷题笔记-1292-元素和小于等于阈值的正方形的最大边长
笔记·算法·leetcode
张祥6422889043 小时前
误差理论与测量平差基础笔记六
笔记·算法·概率论
txinyu的博客3 小时前
std::function
服务器·开发语言·c++
mjhcsp4 小时前
透彻背包DP:从DFS暴力搜索到动态规划的逐步推导
算法·深度优先·动态规划