给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字。例如给定 3 个整数 1234、2345、3456,其中出现最多次数的数字是 3 和 4,均出现了 3 次。
输入格式:
输入在第 1 行中给出正整数 N(≤1000),在第二行中给出 N 个不超过整型范围的非负整数,数字间以空格分隔。
输出格式:
在一行中按格式 “M: n1 n2 …” 输出,其中 M 是最大次数,n1、n2、……为出现次数最多的个位数字,按从小到大的顺序排列。数字间以空格分隔,但末尾不得有多余空格。
输入样例:
3
1234 2345 3456
输出样例:
3: 3 4
来源:
来源:PTA | 程序设计类实验辅助教学平台
链接:https://pintia.cn/problem-sets/12/exam/problems/325
提交:
题解:
#include<stdio.h>
int main(void) {
int N;
scanf("%d", &N);
int array[1000];
for (int i = 0; i < N; i++) {
scanf("%d", &array[i]);
}
// 记录每个数字出现的次数
int countDigit[10] = {0};
// 依次统计输入的各个数的各位数字出现的次数
for (int i = 0; i < N; i++) {
int number = array[i];
// 如果输入的整数为 0,则 0 的计数增 1,继续处理下一个数字
if (number == 0) {
countDigit[0]++;
continue;
}
while (number != 0) {
switch (number % 10) {
case 0:
countDigit[0]++;
break;
case 1:
countDigit[1]++;
break;
case 2:
countDigit[2]++;
break;
case 3:
countDigit[3]++;
break;
case 4:
countDigit[4]++;
break;
case 5:
countDigit[5]++;
break;
case 6:
countDigit[6]++;
break;
case 7:
countDigit[7]++;
break;
case 8:
countDigit[8]++;
break;
case 9:
countDigit[9]++;
break;
default:
break;
}
number /= 10;
}
}
// 出现次数最多的数字的出现次数,假设为数字 0,共出现了 countDigit[0] 次
int maxCount = countDigit[0];
for (int i = 1; i < 10; i++) {
maxCount = countDigit[i] > maxCount ? countDigit[i] : maxCount;
}
// 输出出现次数最多的数字的出现次数
printf("%d:", maxCount);
// 从计数数组中查找,看是否有多个数字均出现 maxCount 次
for (int i = 0; i < 10; i++) {
if (countDigit[i] == maxCount) {
printf(" %d", i);
}
}
return 0;
}