【问题描述】
求一批整数中出现最多的数字。输入一个正整数 n (1<n≤1000),再输入 n 个整数,分析
每个整数的每一位数字,求出现次数最多的各位数字。例如输入 3 个整数 1234、2345、3456,
其中出现次数最多的数字是 3 和 4,均出现了 3 次。试编写相应程序。
【输入形式】
【输出形式】
【样例输入】3
1234 2345 3456
【样例输出】3 4
【样例说明】
【评分标准】
#include<stdio.h>
/*
前提假设:每次输入一个整数再输入回车
思路: 将n个整数看作n个字符串,所以需要两层循环;外层循环保证遍历完n个数,
内层循环将输入的整数逐个字符读入,以'\n'为结束条件,并在内层循环进行统计
由于十进制数只有0~9,故长度为10的数组即可统计每一位的出现次数
逻辑漏洞:输入形如“0012”,以“0”开头的数字0会被统计在内
注:如果将数字以整数的 “ % ”、“ / ”控制循环会出现更为严重的逻辑问题
*/
int main(){
int i;
int n; //n个数
char ch; //读入一个字符
int bite; //整数字符对应的一位整数数字
int cnt[10]; //统计数组
int m; //出现的最大次数
//初始化
for(i=0;i<10;i++)
cnt[i] = 0;
//输入
printf("input n : ");
scanf("%d",&n);
printf("input %d numbers:\n",n);
for(i=0;i<=n;i++){ //保证对n个整数的处理
while((ch=getchar())!='\n'){ //当一个整数的每个字符没处理完
bite = ch - '0'; // 如,1 = ‘1’ - ‘0’
cnt[bite]++; //相应位置计数
}
}
//找到最大值
m=cnt[0];
for(i=1;i<10;i++){
if(m<cnt[i])
m=cnt[i];
}
printf("the most frequent numbers:\n");
for(i=0;i<10;i++){
if(cnt[i]==m) //出现次数最多的输出
printf("%d\n",i);
}
printf("%d times\n",m);
return 0;
}