You need to enable JavaScript to run this app. Google Kickstart 2020 区间boring数统计代码运行结果错误排查
优惠活动
大模型
产品
解决方案
定价
更多

Google Kickstart 2020 区间boring数统计代码运行结果错误排查

Boring数统计代码逻辑错误排查

两处核心逻辑问题

  • 校验条件书写错误:奇数位置的数位校验分支,误将判断数位奇偶的pos_num % 2 == 1写为了position % 2 == 1,导致奇数位置完全不检查数位本身的奇偶性,只要位置为奇数就默认该位符合要求,与题目定义完全不符。
  • 全量校验逻辑颠倒:遍历数位时,代码初始标记为False,逐位将当前位的校验结果覆盖到标记上,最终仅保留最后一个数位的校验结果,没有实现「所有数位全部满足位置-奇偶匹配规则,才判定为boring数」的要求。

举例来说,按照原代码逻辑:

  • 数字6(1位,奇数位置,数位为偶数,不符合boring数定义)会因为校验条件失效被误判为合法
  • 数字24(十位为2,处于奇数位置但为偶数,不符合规则)会因为逐位覆盖标记的逻辑被误判为合法

修复方案

调整校验逻辑:初始默认数字为合法boring数,逐位校验时只要发现某一位不匹配,就直接标记为非法并提前退出循环;同时修正奇偶判断的条件,确保每个位置都校验对应数位的奇偶性:

t = int(input())

for case in range(1, t+1):
    total_number = 0
    l, r = map(int, input().split())
    for number in range(l, r+1):
        is_boring = True
        num_str = str(number)
        for idx in range(len(num_str)):
            pos = idx + 1
            digit = int(num_str[idx])
            # 奇数位置需为奇数,偶数位置需为偶数,不满足则标记为非法
            if (pos % 2 == 1 and digit % 2 != 1) or (pos % 2 == 0 and digit % 2 != 0):
                is_boring = False
                break
        if is_boring:
            total_number += 1
    print(f"Case #{case}: {total_number}")

额外提示

当L、R的取值范围很大时(如达到1e9量级),暴力遍历区间内所有数字的方式会出现运行超时,实际竞赛中可通过前缀计数法:预先计算1到N范围内的boring数总数,再用f(R) - f(L-1)得到区间结果,将时间复杂度降低到与数字位数线性相关的水平。


内容的提问来源于stack exchange,提问作者Anurag Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.24 03:36:10