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


相关推荐
tankeven7 分钟前
动态规划专题(03):区间动态规划从原理到实践(未完待续)
c++·算法·动态规划
天若有情67312 分钟前
【C++原创开源】formort.h:一行头文件,实现比JS模板字符串更爽的链式拼接+响应式变量
开发语言·javascript·c++·git·github·开源项目·模版字符串
大前端下的小角色1 小时前
UE5.6 Cesium 插件编译踩坑记录(UE 5.6 + MSVC 14.38 + CMake 3.31)
c++
田梓燊1 小时前
2026/4/11 leetcode 3741
数据结构·算法·leetcode
斯内科1 小时前
FFT快速傅里叶变换
算法·fft
2301_822703201 小时前
开源鸿蒙跨平台Flutter开发:幼儿疫苗全生命周期追踪系统:基于 Flutter 的免疫接种档案与状态机设计
算法·flutter·华为·开源·harmonyos·鸿蒙
贵慜_Derek1 小时前
Managed Agents 里,Harness 到底升级了什么?
人工智能·算法·架构
feng_you_ying_li2 小时前
c++之哈希表的介绍与实现
开发语言·c++·散列表
2301_822703202 小时前
鸿蒙flutter三方库实战——教育与学习平台:Flutter Markdown
学习·算法·flutter·华为·harmonyos·鸿蒙
Jia ming2 小时前
C语言实现日期天数计算
c语言·开发语言·算法