08-1. 求一批整数中出现最多的个位数字(20)
给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字。例如给定3个整数1234、2345、3456,其中出现最多次数的数字是3和4,均出现了3次。
输入格式:
输入在第1行中给出正整数N(<=1000),在第2行中给出N个不超过整型范围的正整数,数字间以空格分隔。
输出格式:
在一行中按格式“M: n1 n2 ...”输出,其中M是最大次数,n1、n2、……为出现次数最多的个位数字,按从小到大的顺序排列。数字间以空格分隔,但末尾不得有多余空格。
输入样例:
3 1234 2345 3456
输出样例:
3: 3 4
1 #include <stdio.h> 2 3 int main() 4 { 5 int n; //输入n个数 6 scanf("%d", &n); 7 8 int i, a[n], b[10] = {0}; 9 for(i = 0 ; i < n ; i++) { 10 scanf("%d", &a[i]); //将n个数存放到a数组中 11 while(a[i] != 0) { 12 b[a[i] % 10]++; //a[i]的个位数当作b数组的下标 13 a[i] /= 10; //去掉a[i] 的个位数 14 } //a[i]的 各个位数(个位,百位...)都存放在b 数组的下标 ,并且记录下它出现的个数 15 } //n 个数字都遍历完 16 int t = 0; 17 for(i = 0 ; i < 10 ; i++) { //b[i]表示数字 i 出现的次数 18 if(t < b[i]) { 19 t = b[i]; //找到b[i]的最大值 20 } 21 } 22 printf("%d: ", t); //按格式输出前面部分 23 int c[10] = {-1}, cnt = 0; 24 for(i = 0 ; i < 10 ; i++) { //遍历b[i]数组 25 if(b[i] == t) { //找到b[i]的所有最大值 (出现最多次数) 26 c[i] = i; //并将最大值的下标存放到c 数组中(下标对应相等 ) 27 cnt++; //并记录有多少最大值 28 } 29 } 30 int cnt2 = 0; 31 for(i = 0; i < 10; i++) { //遍历c 数组 32 if(c[i] == i) { //找到最大值下标 (出现最多次数的数字) 33 printf("%d", i); //并输出 34 cnt2++; 35 if(cnt2 < cnt) { 36 printf(" "); 37 } 38 } 39 } 40 41 return 0; 42 }