题解:洛谷 P1980 [NOIP 2013 普及组] 计数问题

【题目来源】

洛谷:P1980 [NOIP 2013 普及组] 计数问题 - 洛谷

【题目描述】

试计算在区间 \(1\)\(n\) 的所有整数中,数字 \(x(0\le x\le 9)\) 共出现了多少次?例如,在 \(1\) 到 $11 $ 中,即在 \(1,2,3,4,5,6,7,8,9,10,11\) 中,数字 $1 $ 出现了 \(4\) 次。

【输入】

\(2\) 个整数 \(n,x\),之间用一个空格隔开。

【输出】

\(1\) 个整数,表示 \(x\) 出现的次数。

【输入样例】

11 1

【输出样例】

4

【算法标签】

《洛谷 P1980 计数问题》 #模拟# #字符串# #NOIP普及组# #2013#

【代码详解】

#include <bits/stdc++.h>
using namespace std;
int n, x;
int a[15];  //定义a数组,保存0-9数字的出现次数
void calc(int x)
{
    while (x>0) {  //进行数位拆分,对x每位上的数进行计数
        a[x%10]++;  
        x /= 10;
    }
}
int main()
{
    cin >> n >> x;  // 输入n和x
    for (int i=1; i<=n; i++) {  //从1遍历至n
        calc(i);  //对每个数进行统计
    }
    cout << a[x] << endl;  //输出数字x出现的次数
    return 0;
}

【运行结果】

11 1
4
posted @ 2026-02-16 15:14  团爸讲算法  阅读(2)  评论(0)    收藏  举报