题解:#2047.「NOIP 2010 普及组」数字统计 审核通过

lyhldy CSP-J2二等 2024-07-19 16:45:33 6

咱们分析一下:

请统计某个给定范围 的所有整数中,数字 2 出现的次数。 很明显,这是一道数位分离的题目。

二话不说,先上数位分离代码:

int cnt=0;   //统计数字出现的次数
bool two(int k) {   //基于函数实现
    do {
        int r = k % 10;   //取个位
        if (r == 2)   //如果是2
            cnt++;   //次数加一
        k /= 10;   //除去个位
    } while (k != 0);   //由于整数除法中消完个位后为0,作为退出条件
    return 0;   //结束,可选
}

这里我就直接合并了

懂了数位分离,接下来就很好办了

只要一个循环遍历,统计出现总数就行了

附主函数:

int main() {
    freopen("two.in", "r", stdin);   //
    freopen("two.out", "w", stdout); //别忘了文件操作
    int l, r;
    scanf("%d %d", &l, &r);
    for (int i = l; i <= r; i++) {   //循环遍历,统计
        two(i);//判断,统计
    }
    printf("%d\n", cnt);
    fclose(stdin);
    fclose(stdout);
    return 0;
}

完整代码

//头文件被苦力怕炸掉了
int cnt = 0;
bool two(int k) {
    do {
        int r = k % 10;
        if (r == 2)
            cnt++;
        k /= 10;
    } while (k != 0);
    return 0;
}
int main() {
    freopen("two.in", "r", stdin);
    freopen("two.out", "w", stdout);
    int l, r;
    scanf("%d %d", &l, &r);
    for (int i = l; i <= r; i++) {
        two(i);
    }
    printf("%d\n", cnt);
    fclose(stdin);
    fclose(stdout);
    return 0;
}

感谢能看到这里qwq

{{ vote && vote.total.up }}