学习C++从娃娃抓起!记录下USACO(美国信息学奥赛)备考学习过程中的题目,记录每一个瞬间。
附上汇总贴:USACO备考冲刺必刷题 | 汇总-CSDN博客
【题目描述】
Bessie 的大脑反应灵敏,仿佛真实地看到了她数过的一个又一个数。她开始注意每一个数码(0…9):每一个数码在计数的过程中出现过多少次?
给出两个整数 M 和 N,求在序列 [M,M+1,M+2,…,N?1,N] 中每一个数码出现了多少次。
【输入】
第 1 行: 两个用空格分开的整数 M 和 N。
【输出】
第 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