Bessie 处于半梦半醒的状态。过了一会儿,她意识到她在数数,不能入睡。
Bessie 的大脑反应灵敏,仿佛真实地看到了她数过的一个又一个数。她开始注意每一个数码( 0 … 9 0 \ldots 9 0…9):每一个数码在计数的过程中出现过多少次?
给出两个整数 M M M 和 N N N,求在序列 [ M , M + 1 , M + 2 , … , N − 1 , N ] [M, M + 1, M + 2, \ldots, N - 1, N] [M,M+1,M+2,…,N−1,N] 中每一个数码出现了多少次。
第 1 1 1 行: 两个用空格分开的整数 M M M 和 N N N。
第 1 1 1 行: 十个用空格分开的整数,分别表示数码 0 … 9 0 \ldots 9 0…9 在序列中出现的次数。
该题只要考查了对整型和字符数组的使用,以及对c语言字符串的理解。
大概讲一下题意,给出两个整数,需要遍历这两个整数之间的整数,在遍历过程中,求每一个数字中出现0到9的次数之和,最有打印一排数据分别表示0,1,2,3,4,5,6,7,8,9这些元素出现的总次数。
先定义一个计算最终结果的数组,即0到9出现的次数统计,
键入M,N,写一个for循环遍历M到N之间的整数,遍历的过程中,定义一个足够大的字符串,将每一轮循环中的数字强转为字符串,再用for循环遍历得到的字符串,得到字符串的每一个字符,枚举0到9,在while循环中与字符进行比较,如果存在,则计数器数组相应下标数加一。
值得一提的是,需要定义一个临时下标,每一次遍历数字强转后的字符串时,必须将下标重置为0。
#include
#include
int main() {
int m, n;
scanf("%d%d", &m, &n);
//定义一个整型数组存储0到9出现的次数 初始化所有元素为0
int arr[10] = {0};
int count;
//遍历m到n之间的数i
for (int i = m; i <= n; ++i) {
//创建一个临时字符串 ,存储m到n之间的数字
//注意这里临时数组的大小要满足题目要求
char str[20];
//使用sprint函数将数字转换为字符串类型
snprintf(str, sizeof(str), "%d", i);
//遍历字符串,统计出现0到9的次数 存入目标数组arr
for (int j = 0; j < strlen(str); ++j) {
char c = str[j];
count = 0;
//枚举0到9 跟字符串数组的每一个元素比较
while (count < 10) {
//如果字符是相应的数字, 则目标数组相应下标的元素加一
if (c == count + '0'){
arr[count]+=1;
}
count++;
}
}
}
//打印计数的数组元素
for (int i = 0; i < 10; ++i) {
printf("%d ",arr[i]);
}
return 0;
}