目录

week4-一维数组数码个数

week4-[一维数组]数码个数

week4-[一维数组]数码个数

题目描述

给定若干个正整数,请求出这些正整数中,数码 0,1,2,…,90,1,2,\ldots,90,1,2,…,9 分别出现了多少次。

输入格式

输入只有一行,包括若干个正整数,以 000 作为结束标志。

输出格式

输出只有一行,包括 101010 个整数,分别表示数码 0,1,2,…,90,1,2,\ldots,90,1,2,…,9 在输入正整数中的出现次数。

样例 #1

样例输入 #1

546 2120 549 0

样例输出 #1

1 1 2 0 2 2 1 0 0 1

样例 #2

样例输入 #2

612 1354 19 7 98 395 0

样例输出 #2

0 3 1 2 1 2 1 1 1 3

样例 #3

样例输入 #3

1 22 333 4444 55555 6666 777 88 9 0

样例输出 #3

0 1 2 3 4 5 4 3 2 1

提示

数据范围

对于所有输入数据,每个正整数不超过 10910^9109 ,正整数的数量不超过 200200200 个。

🔎 解题思路

  1. 我们需要统计每个数码(digit 0~9)在所有输入的正整数中出现的次数。
  2. 输入是以 0 作为结束标志的,所以读到 0 就停止。
  3. 对每个数进行分解:不断取 num % 10 得到最后一位数字,然后 num /= 10 去掉最后一位。
  4. 每得到一个数码,就把对应的计数器 cnt[digit]++
  5. 所有数处理完后,输出 cnt[0]cnt[9]

📝 代码实现(C++)

#include <iostream>
using namespace std;

int main() {
    int cnt[10] = {0};  // 统计0~9出现次数
    long long num;

    while (cin >> num) {
        if (num == 0) break;  // 遇到结束标志退出
        while (num > 0) {
            int digit = num % 10;
            cnt[digit]++;
            num /= 10;
        }
    }

    for (int i = 0; i < 10; i++) {
        cout << cnt[i];
        if (i < 9) cout << " ";
    }
    cout << endl;

    return 0;
}