GESP 五级 · GESP 202509 C++ 五级 第 15 题

选择题 · 答案 A · 考点:模拟

← 整套速查表 GESP 五级 全部真题

题目

给定一个由非负整数组成的数组 digits,表示一个非负整数的各位数字,其中最高位在数组首位,且 digits 不含前导 0(除非是 0 本身)。下面代码对该整数执行 +1 操作,并返回结果数组,则横线上应填写( )。

vector<int> plusOne(vector<int>& digits) {
    for (int i = (int)digits.size() - 1; i >= 0; --i) {
        if (digits[i] < 9) {
            digits[i] += 1;
            return digits;
        }
        _____________  // 在此处填入代码
    }
    digits.insert(digits.begin(), 1);
    return digits;
}
答案:A

考点

模拟 讲解 →模拟 真题汇总 →

解题思维

根据上下文和C++语法规则确定空缺处应填的内容,关注函数调用参数、表达式和返回值类型。

常见错误

填空时注意语法完整性:分号、括号匹配、函数参数类型和个数、返回值类型。

详细解析(节选)

【考点】进位处理|数组操作|模拟

🎯 考纲定位 本题出自 GESP 五级"算法与数据结构"模块中数据处理与模拟类题目。命题人专门挑选这个"全 9 进位"的特殊场景,卡住的是考生对进位传播机制的理解——很多人只看到最后要插 1,却忘了循环里每个 9 必须先变成 0,否则逻辑链直接断裂。

🧠 解题思维 看到题先想:加 1 操作从个位开始,遇到小于 9 的位直接 +1 返回;遇到 9 就进位——当前位归零,向高位继续进。关键观察是循环倒序遍历的语义:i 每次 −1 就是向高一位移动,循环没返回说明所有位都是 9,才走到最后的 insert(begin,1)。因此横线处必须做三件事:当前位清零、让循环继续、保持数组有效性。

🪤 陷阱拆解

🔄 反命题思维 如果把循环条件改成 i > 0,最高位是 9 时进位会被完全忽略,999+1 会变成 199,这就是命题人埋的伏笔。刷到类似题先问:当前位归零后,循环会不会继续?最高位进位有没有被覆盖? 答案变,陷阱就现形。

同考点真题

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断