文章

【GESP】C++二级模拟 luogu-p1179, [NOIP 2010 普及组] 数字统计

GESP二级,多层循环和分支练习,难度★✮☆☆☆。

luogu-P1179 [NOIP 2010 普及组] 数字统计

题目要求

题目描述

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

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

输入格式

$2$ 个正整数 $L$ 和 $R$,之间用一个空格隔开。

输出格式

数字 $2$ 出现的次数。

样例输入 #1

1
2 22

样例输出 #1

1
6

样例输入 #2

1
2 100

样例输出 #2

1
20

提示

$1 ≤ L ≤R≤ 100000$。

NOIP2010 普及组 第一题


题目分析

解题思路

  1. 读取输入的范围 $[L, R]$。
  2. 初始化一个计数器,用于统计数字 $2$ 出现的次数。
  3. 遍历从 $L$ 到 $R$ 的所有整数。
  4. 对于每个整数,循环除以 $10$,直到该整数为 $0$。
  5. 在每次循环中,检查余数是否为 $2$,如果是,则计数器加 $1$。
  6. 遍历完毕后,输出计数器的值,即数字 $2$ 出现的次数。


示例代码

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 l, r; // 定义两个整型变量l和r,用于存储输入的范围
    cin >> l >> r; // 从标准输入流中读取l和r的值
    int ans = 0; // 定义一个整型变量ans,初始化为0,用于存储答案
    for (int i = l; i <= r; i++) { // 从l开始循环,直到i不大于r
        int j, re = i; // 定义一个整型变量j和re,re初始化为i
        while (re != 0) { // 当re不为0时循环
            j = re % 10; // 计算re除以10的余数,并赋值给j
            if (j == 2) { // 如果j等于2
                ans++; // 将ans加1
            }
            re /= 10; // 将re除以10
        }
    }
    cout << ans; // 输出ans的值
    return 0; // 返回0,表示程序正常结束
}

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

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

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

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

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