四时宝库

程序员的知识宝库

USACO备考冲刺必刷题 | P1554 梦中的统计

学习C++从娃娃抓起!记录下USACO(美国信息学奥赛)备考学习过程中的题目,记录每一个瞬间。

附上汇总贴:USACO备考冲刺必刷题 | 汇总-CSDN博客


【题目描述】

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

给出两个整数 MN,求在序列 [M,M+1,M+2,…,N?1,N] 中每一个数码出现了多少次。

【输入】

第 1 行: 两个用空格分开的整数 MN

【输出】

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

【输入样例】

129 137

【输出样例】

1 10 2 9 1 1 1 1 0 1

【代码详解】

#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 

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接