习题7-2 求一批整数中出现最多的个位数字 (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 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;
}

 

习题7-2 求一批整数中出现最多的个位数字 (20 分)

上一篇:浅谈队列优化BFS,双端队列BFS和A*


下一篇:BOM