梦中统计

Description

在L-R的整数中,每个数各位上每个数字一共出现多少次?

Input

一行,包含两个整数,用空格隔开的M和N。

Output

一行,包含十个用空格隔开的整数,分别表示数字0,1,2,3,.....,9在序列中出现的次数。

Sample Input

129 137

Sample Output

1 10 2 9 1 1 1 1 0 1

HINT

均在int范围

python解法

# 从用户输入读取两个整数值,分别赋值给l和r
l, r = map(int, input().split())

# 初始化一个长度为10的列表,用于记录0到9每个数字出现的次数
digit_counts = [0] * 10

# 遍历区间[l, r]内的每一个整数
for i in range(l, r + 1):
    # 转换为正数进行处理,确保负数的每一位数字也被正确计数
    k = abs(i)

    # 当k不为0时,循环统计其每一位上的数字
    while k > 0:
        # 使用取模运算得到k的最后一位数字
        digit = k % 10
        # 对应位置的计数加1
        digit_counts[digit] += 1
        # 整数除法去掉k的最后一位数字
        k //= 10

# 使用join和map函数将列表中的数字转换为字符串,并用空格连接,然后输出结果
print(" ".join(map(str, digit_counts)))

c++解法

#include<bits/stdc++.h> // 包含大多数标准库头文件
using namespace std;

int main() {
    int l, r, k; // 定义三个整数变量l, r, k
    cin >> l >> r; // 从标准输入读取两个整数l和r

    int a[10] = {0}; // 定义一个长度为10的整数数组a,并初始化为0。用于存储0到9每个数字出现的次数

    for (int i = l; i <= r; i++) { // 循环遍历从l到r的每一个整数
        if (i < 0) { // 如果当前整数i小于0
            k = -i; // 取i的相反数
        } else {
            k = i; // 否则k就是i本身
        }

        while (k) { // 当k不为0时,循环进行以下操作
            a[k % 10]++; // 统计k的最后一位数字出现的次数,并存储在数组a中对应的位置
            k /= 10; // 去掉k的最后一位数字
        }
    }

    for (int i = 0; i <= 9; i++) { // 循环遍历数组a
        cout << a[i] << " "; // 输出每个数字出现的次数,并在后面添加一个空格
    }

    return 0; // 程序正常结束,返回0
}
如果您有更优的解法,欢迎在评论区一起交流噢~
阅读剩余
THE END