B4497 [GESP202603 二级] 数数 题解

· · 题解

欢迎报名洛谷网校,报名课程可以获得对应组别的知识点讲解与答疑服务,期待和大家一起进步!点击图片即可报名。

:::align{center} :::

这道题的意思很直白:给定区间 [L, R],统计其中有多少个数的各位数字里恰好包含 32

由于数据范围 R \leq 10^6,规模很小,我们直接暴力枚举区间内的每一个数,对每个数逐位检查其中 2 出现了几次,如果恰好是 3 次就让答案加一即可。具体做法是:对当前数不断取模 10 得到末位、再除以 10 去掉末位,循环直到数变为 0,过程中统计 2 的个数。

for(________) { // 暴力枚举每一个数
    int t = i, c = 0;
    while(________) { // 进行数位拆分
        if(________) ________;
        ________;
    }
    if(________) ans++; // 如果 2 出现了恰好 3 次
}