acgo题库
  • 首页
  • 题库
  • 学习
  • 天梯
  • 备赛

    竞赛

    • CSP-J/S
    • 蓝桥杯

    考级

    • GESP
    • CPA
    • 电子学会考级
  • 竞赛
  • 讨论
  • 团队
  • 商城
登录
注册
题目详情提交记录(0)
  • 题解

    题目解析 * 输入输出:第一行输入正整数 nnn(范围上限),第二行输入目标数字 kkk(1≤k≤91 \leq k \leq 91≤k≤9);输出 kkk 在整数 111 到 nnn 的所有数位中出现的总次数。 * 数据范围:1≤n≤10001 \leq n \leq 10001≤n≤1000,数据规模极小,允许逐位检查每个数字。 * 复杂度要求:时间复杂度 O(n⋅log⁡10n)O(n \cdot \log_{10}n)O(n⋅log10 n)(最多遍历 1000×41000 \times 41000×4 个数位),空间复杂度 O(1)O(1)O(1) 或 O(log⁡n)O(\log n)O(logn)(字符串临时空间)。 * 算法知识点:模拟、枚举、数位统计、字符串转换 思路解析 1. 问题分解:将“统计区间 [1,n][1, n][1,n]”分解为对每个整数单独统计并累加。即遍历 i∈[1,n]i \in [1, n]i∈[1,n],计算数字 iii 中包含多少个 kkk,求和得答案。 2. 数位提取(字符串法):对于单个整数 xxx,利用 to_string(x) 将其转换为字符串,遍历每个字符: * 通过 s[i] - '0' 将字符转换为对应的数值; * 若等于 kkk,则计数器加一。 注:也可使用数学方法(x % 10 取个位后 x /= 10),但字符串法代码更简洁。 3. 累加输出:主函数中维护累加器 ans,调用统计函数并输出最终结果。 完整代码

    userId_undefined
    庄莫野JongMoye
    9阅读
    0回复
    0点赞
暂无数据

提交答案之后,这里将显示提交结果~

首页