7-148 求一批整数中出现最多的个位数字
分数 20
作者 徐镜春
单位 浙江大学
给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字。例如给定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 max=-1,n,t,a[1000],i,b[10]={0,1,2,3,4,5,6,7,8,9},j,c[10]={0};
scanf("%d",&n);
for(i=0;i<n;i++)scanf("%d",&a[i]);
for(i=0;i<n;i++){
t=a[i];
while(a[i]>0){
t=a[i]%10;
a[i]=a[i]/10;
for(j=0;j<10;j++){
if(t==b[j]){
c[j]++;
break;
}
}
}
}
for(i=0;i<10;i++){
if(c[i]>max)
max=c[i];
}
printf("%d:",max);
for(i=0;i<10;i++){
if(c[i]==max)
printf(" %d",i);
}
}
一个错误点,不知道是啥
增加考虑输入的整数为0的情况。
修改如下:
#include<stdio.h>
int main(){
int max=-1,n,t,a[1000],i,b[10]={0,1,2,3,4,5,6,7,8,9},j,c[10]={0};
scanf("%d",&n);
for(i=0;i<n;i++)scanf("%d",&a[i]);
for(i=0;i<n;i++){
t=a[i];
// 考虑输入的数为0的情况
if(t==0){
c[0]++;
}
while(a[i]>0){
t=a[i]%10;
a[i]=a[i]/10;
for(j=0;j<10;j++){
if(t==b[j]){
c[j]++;
break;
}
}
}
}
for(i=0;i<10;i++){
if(c[i]>max)
max=c[i];
}
printf("%d:",max);
for(i=0;i<10;i++){
if(c[i]==max)
printf(" %d",i);
}
}
这样改,供参考:
#include<stdio.h>
int main(){
int max = -1,n,t,a[1000],i,b[10]={0,1,2,3,4,5,6,7,8,9},j,c[10]={0};
scanf("%d",&n);
for(i=0;i<n;i++)scanf("%d",&a[i]);
for(i=0;i<n;i++){
t=a[i];
if (!t) c[0]++; // 修改
while (t > 0) { //while(a[i]>0){ 修改
c[t % 10]++; //t=a[i]%10;
t /= 10; //a[i]=a[i]/10;
//for(j=0;j<10;j++){
// if(t==b[j]){
// c[j]++;
// break;
// }
//}
}
}
for(i=0;i<10;i++){
if(c[i]>max)
max=c[i];
}
printf("%d:",max);
for(i=0;i<10;i++){
if(c[i]==max)
printf(" %d",i);
}
return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:问题标题: 求一批整数中出现最多的个位数字
问题描述:
给定一批整数,分析每个整数的每位数字,求出现次数最多的个位数字。
例如,给定3个整数1234、2345、3456,其中出现最多次数的数字是3和4,均出现了3次。
输入格式: 输入数据的格式如下:
N
x1 x2 x3 ... xn
其中N表示整数的数量,x1、x2、...、xn表示这N个整数。
输出格式: 输出结果的格式如下:
M: n1 n2 ...
其中M是最大出现次数,n1、n2、...表示出现次数最多的个位数字,按从小到大的顺序排列。数字间以空格分隔,末尾不得有多余空格。
示例: 输入:
3
1234 2345 3456
输出:
3: 3 4