题目描述:给定一系列整数,对所有整数的每一位数字统计0~9各个数字的出现次数,求出现次数最多的数字。
输入:有两行,第1行是整数n(1≤n≤100),表示有n个整数;第2行是n个整数。
输出:有两行。第1行输出出现最多的次数。第2行输出出现最多的数字d(如果d不唯一,要由小到大列出全部,每个数据以2列的域宽显示)。
样例输入:
3 1234 2345 3456
样例输出:
3 3 4
#include<stdio.h>
int main()
{
int n;
scanf("%d", &n);
int a[100]={0};//必须初始化为0
int b;//输入的整数
int max = 0;
for (int i = 1;i <= n;i++)
{
scanf("%d", &b);
while (b != 0)//最终b与10的商会为0
{
a[b % 10]++;//先得出个位数
b /= 10;//此处将个位数消去
}
}
for (int i = 1;i < 10;i++)
{
if (max < a[i])
{
max = a[i];
}
}
printf("%d\n", max);
for (int i = 1;i < 10;i++)
{
if (a[i] == max)
{
printf(" %d", i);
}
}
return 0;
}
该题主要难在如何对输入的整数进行每一位数上的拆分,我用的方法是对输入的整数不断地进行其与10的取商与取余,来进行对整数的每一位数的提取。
对此不太理解的好哥们和好姐们可以使用以下代码感受一下
int main()
{
int n;
scanf("%d", &n);
int a[100];
int i = 1;
while (n != 0)
{
a[i] = n % 10;
n = n / 10;
i++;
}
for (int b = 1;b < i;b++)
{
printf("%d\n", a[b]);
}
return 0;
}