题解:洛谷 P1554 [USACO06DEC] 梦中的统计 Dream Counting B

【题目来源】

洛谷:P1554 梦中的统计 - 洛谷

【题目描述】

Bessie 的大脑反应灵敏,仿佛真实地看到了她数过的一个又一个数。她开始注意每一个数码(\(0\dots 9\)):每一个数码在计数的过程中出现过多少次?

给出两个整数 \(M\)\(N\),求在序列 \([M,M+1,M+2,\dots, N-1,N]\) 中每一个数码出现了多少次。

【输入】

\(1\) 行: 两个用空格分开的整数 \(M\)\(N\)

【输出】

\(1\) 行: 十个用空格分开的整数,分别表示数码 \(0\dots 9\) 在序列中出现的次数。

【输入样例】

129 137

【输出样例】

1 10 2 9 1 1 1 1 0 1

【解题思路】

image

【算法标签】

《洛谷 P1554 梦中的统计》 #模拟# #字符串# #数学# #USACO#

【代码详解】

#include <bits/stdc++.h>
using namespace std;

int main()
{
    int m, n, a[15]={0};  // 定义m、n和a数组,a数组初始化为0
    cin >> m >> n;  // 输入m和n
    for (int i=m; i<=n; i++) {  // 从m遍历到n
        int n1 = i;  // 得到每个数
        while (n1!=0) {  // 进行数位拆分
            int t = n1 % 10;  // 取出余数
            n1 = n1 / 10;  // 每个数再整除10,取出余数部分
            a[t]++;  // 使用投票箱方法,对t下标的数据进行自增
        }
    }
    for (int i=0; i<=9; i++) {  // 依次遍历0-9
        cout << a[i] << " ";  // 打印每个数字出现的次数,中间用空格隔开
    }
    return 0;
}

【运行结果】

129 137
1 10 2 9 1 1 1 1 0 1 
posted @ 2026-02-16 15:45  团爸讲算法  阅读(3)  评论(0)    收藏  举报