GESP 八级 · GESP 202506 C++ 八级 第 9 题

选择题 · 答案 A · 考点:时间复杂度分析

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

题目

下面的 sum_digit 函数试图求出从 $1$ 到 $n$(包含 $1$ 和 $n$)的数中,包含数字 $d$ 的个数。该函数的时间复杂度为( )。

#include <string>
int count_digit(int n, char d) {
    int cnt = 0;
    std::string s = std::to_string(n);
    for (int i = 0; i < s.length(); i++)
        if (s[i] == d)
            cnt++;
    return cnt;
}
int sum_digit(int n, char d) {
    int sum = 0;
    for (int i = 1; i <= n; i++)
        sum += count_digit(i, d);
    return sum;
}
答案:A

考点

时间复杂度分析

解题思维

分析时间复杂度时关注循环层数和每层迭代次数,递归算法则分析递归树。注意最坏/最好/平均情况的区别。

常见错误

分析复杂度时注意外层循环和内层循环的关联。例如内外两层都到n的循环不一定是O(n²),要看内层是否每次都在缩小。

详细解析(节选)

【考点】时间复杂度分析|字符串转换|对数复杂度|循环嵌套

1. 考纲定位

2. 解题思维

3. 陷阱拆解

4. 反命题思维

同考点真题

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