信息学奥赛一本通题目解析:1949:【10NOIP普及组】数字统计

【题目描述】

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

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

【输入】

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

【输出】

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

【输入样例】

2 22

【输出样例】

6

【提示】

【输入输出样例2】

输入:

2 100

输出:

20

【数据范围】

1 ≤ L ≤ R≤ 10000。

【解题思路】

逐个检查(暴力方法)

对于每个整数,检查其每一位是否为2。这种方法简单直观,但可能在数字范围较大时效率不高。

  1. 遍历范围内所有数字:从L遍历到R,对每个数字进行检查。
  2. 检查每一位数字:对于每个数字,通过循环检查其每一位是否为2。这可以通过不断地将数字除以10并检查余数是否为2来实现。
  3. 计数:每当发现一个2,就将计数器增加1。
  4. 总和:遍历完成后,计数器的值即为范围[L, R]内数字2出现的总次数。

【代码实现】

#include <iostream>
using namespace std;

int count2s(int n) {
    int count = 0;
    while (n > 0) {
        if (n % 10 == 2) count++;
        n /= 10;
    }
    return count;
}

int main() {
    int L, R;
    cin >> L >> R;
    int total = 0;
    for (int i = L; i <= R; ++i) {
        total += count2s(i);
    }
    cout << total << endl;
    return 0;
}

  • 10
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值