文章

【GESP】C++二级练习 luogu-b2082, 数字统计

GESP二级练习,涉及多层条件和循环嵌套,类似题型重复练习,难度★✮☆☆☆。

luogu-b2082

题目要求

题目描述

请统计某个给定范围 $[L,R]$ 的所有整数中,数字 $2$ 出现的次数。

比如给定范围 $[2,22]$,数字 $2$ 在数 $2$ 中出现了 $1$ 次,在数 $12$ 中出现 $1$ 次,在数 $20$ 中出现 $1$ 次,在数 $21$ 中出现 $1$ 次,在数 $22$ 中出现 $2$ 次,所以数字 $2$ 在该范围内一共出现了 $6$ 次。

输入格式

输入共 $1$ 行,为两个正整数 $L$ 和 $R$,之间用一个空格隔开。

输出格式

输出共 $1$ 行,表示数字 $2$ 出现的次数。

样例输入 #1

1
2 22

样例输出 #1

1
6

样例输入 #2

1
2 100

样例输出 #2

1
20

数据范围

$1<L,R<10000$。


题目分析

这是一道简单的数学题,需要统计一个给定范围内所有整数中数字2出现的次数。我们可以使用一个循环来遍历这个范围,然后对每个数进行逐位判断。具体来说,我们可以通过取模运算(%)和整除运算(/)来逐位提取每个数的数字,并判断是否为2。如果是,就将答案加1。最后输出答案即可。

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
using namespace std;
int main() {
    int a, b; // 定义两个整数a和b
    cin >> a >> b; // 从输入流中读取a和b的值
    int ans = 0; // 初始化答案为0
    for (int i = a; i <= b; i++) { // 从a到b遍历每个数
        int d = i, num; // 将当前数i赋值给d,并定义一个临时变量num
        while (d != 0) { // 当d不为0时循环
            num = d % 10; // 取d的最后一位数字
            if (num == 2) { // 如果最后一位数字是2
                ans++; // 答案加1
            }
            d /= 10; // 将d除以10,去掉最后一位数字
        }
    }
    cout << ans; // 输出答案
    return 0;
}

所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code

GESP各级别考纲要点、知识拓展和练习题目清单详见C++学习项目主页

luogu-”系列题目已加入洛谷Java、C++初学团队作业清单,可在线评测,团队名额有限,欢迎加入。

bcqm-”系列题目可在编程启蒙题库进行在线评测。

本文由作者按照 CC BY 4.0 进行授权