*7-148 求一批整数中出现最多的个位数字

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);        
    } 
}

一个错误点,不知道是啥

img

增加考虑输入的整数为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);        
    } 
}
 

img

这样改,供参考:

#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;
}

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7697785
  • 除此之外, 这篇博客: 校内模拟赛 C语言 晚会问题(小明要组织一台晚会,总共准备了...)中的 小明要组织一台晚会,总共准备了n个节目。然后晚会的时间有限,他只能最终选择其中的m个节目。这n个节目是按照小明设想的顺序给定的,顺序不能改变。小明发现,观众你对于晚会的喜欢程度与前几个节目的好看成都有非常大的关系,他希望选出的第一个节目尽可能好看,在此前提下希望第二个节目尽可能好看,依次类推,小明给每个节目定义了一个好看值,请你帮助小明选择出m个节目,满足他的要求 部分也许能够解决你的问题。
  • 以下回答由chatgpt基于相关博客总结生成:

    问题标题: 求一批整数中出现最多的个位数字

    问题描述:

    给定一批整数,分析每个整数的每位数字,求出现次数最多的个位数字。

    例如,给定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
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^