给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字。例如给定3个整数1234、2345、3456,其中出现最多次数的数字是3和4,均出现了3次。
输入格式:
输入在第1行中给出正整数N(≤1000),在第二行中给出N个不超过整型范围的非负整数,数字间以空格分隔。
输出格式:
在一行中按格式“M: n1 n2 ...”输出,其中M是最大次数,n1、n2、……为出现次数最多的个位数字,按从小到大的顺序排列。数字间以空格分隔,但末尾不得有多余空格。
输入样例:
3 1234 2345 3456
输出样例:
3: 3 4
提交:
#include <stdio.h> //简化版 int main(){ int n,i; int max=0;//max表示最大次数 int num[10]={0};//存储各个数字出现的次数,下标0表示数字0 scanf("%d\n",&n); for (i=0; i<n; i++) { int number; scanf("%d ", &number);//输入每个数字 while (number > 0) { num[number%10]++;//求余获取每个数字并保存到数组中 number /= 10; } } //找最大次数 for(i=0;i<10;i++) { if (max < num[i]) max = num[i]; } //输出 printf("%d:",max); for(i=0;i<10;i++) { if (max == num[i]) printf(" %d",i);//数字出现的次数为最大次数则输出该最大次数对应的数字 } return 0; }
自己写的原始版本:
#include <stdio.h> int main(){ int n,i,j,k; int max=0; scanf("%d\n",&n); int arr[n]; for (i=0;i<n;i++) { scanf("%d ",&arr[i]); } int num[10]={0};//存储各个数字出现的次数,下标0表示数字0 for (i=0;i<n;i++) { while(arr[i] > 0){ k = arr[i]%10; num[k]++;//k是0,则数组第一个位置数字加1 即0记一次数 arr[i]/=10; } } for(i=0;i<10;i++) { if (max < num[i]) max = num[i];//max表示最大次数 } printf("%d:",max); for(i=0;i<10;i++) { if (max == num[i]) printf(" %d",i);//数字出现的次数为最大次数则输出该最大次数对应的数字 } return 0; }