嘣叽 2026-03-12 01:36 采纳率: 60%
浏览 4
已结题

PTA-求一批整数中出现最多的个位数字

为什么说我0次数最多的时候不对

问题详情:
给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字。例如给定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;
    scanf("%d", &N);
    int count[10] = {0};    //记录0-9数字出现次数
    while(N--){
        int num;
        scanf("%d", &num);  //循环输入整数
        while(num){
            count[num%10]++;  //记数字出现次数录
            num /= 10;
        }
    }
    int max = 0;
    for(int i = 0; i < 10; i++){
        if(count[i] > max){
            max = count[i];  //找到次数最多的数字
        }
    }
    printf("%d:", max);
    for(int i = 0; i < 10; i++){
        if(count[i] == max){
            printf(" %d", i);  //输出
        }
    }
    return 0;
}

我自己的测试结果:

img

img

系统结果:

img

  • 写回答

2条回答 默认 最新

  • 檀越@新空间 2026-03-12 09:19
    关注

    上午好☀️☀️☀️️
    本答案参考通义千问

    你提供的代码逻辑总体上是正确的,但有一个关键问题:当所有数字的个位数出现次数为0时(例如输入全是0),你的代码会输出 0:,而根据题目要求,应该输出 0:,但系统可能期望的是 “0: ” 后面没有空格。

    此外,在输出格式中,如果最大次数是0,那么输出的数字列表应该是空的。比如,当输入全是0时,每个数字的个位数都是0,此时 count[0] 为 N,而其他位置都为0,所以最大次数是 N,而不是0。


    ✅ 问题分析

    1. 当所有数字都是0时

    • 比如输入:
      3
      0 0 0
      
    • 那么每个数的个位数是0,所以 count[0] = 3
    • 此时 max = 3,输出应为 3: 0,而不是 0: 0

    2. 当没有数字出现时(不可能,因为N≥1)

    • 但若 N=0,程序会出错,不过题目说明 N 是正整数,所以不需要处理这种情况。

    3. 输出格式问题

    • max = 0 时,表示没有任何数字出现(不可能),此时输出应为空,但根据题意,这种情况不会发生。
    • 如果你测试了类似 0: 的情况,说明你可能误判了最大值。

    ✅ 修复建议

    你的代码基本正确,但可以稍作优化以确保输出格式符合要求:

    ✅ 修改后的代码如下:

    #include <stdio.h>
    
    int main() {
        int N;
        scanf("%d", &N);
        int count[10] = {0};    // 记录0-9数字出现次数
    
        while (N--) {
            int num;
            scanf("%d", &num);  // 循环输入整数
            while (num) {
                count[num % 10]++;  // 记录个位数出现次数
                num /= 10;
            }
        }
    
        int max = 0;
        for (int i = 0; i < 10; i++) {
            if (count[i] > max) {
                max = count[i];  // 找到最大出现次数
            }
        }
    
        printf("%d:", max);
        int first = 1;  // 控制是否需要输出空格
        for (int i = 0; i < 10; i++) {
            if (count[i] == max) {
                if (first) {
                    printf("%d", i);
                    first = 0;
                } else {
                    printf(" %d", i);
                }
            }
        }
    
        return 0;
    }
    

    ✅ 关键点说明

    1. 使用 first 变量控制输出格式

      • 避免在第一个数字前加空格,保证输出格式正确。
    2. 确保最大次数不为0

      • 在题目中,输入的数字至少有一个,所以 max 不可能是0。
    3. 测试用例示例

      • 输入:

        3
        0 0 0
        
      • 输出应为:

        3: 0
        
      • 输入:

        3
        1234 2345 3456
        
      • 输出应为:

        3: 3 4
        

    ✅ 总结

    你的代码逻辑是正确的,但 输出格式特殊情况处理 需要更严谨。建议使用 first 变量来控制输出格式,避免末尾空格或错误的空格。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月20日
  • 已采纳回答 3月12日
  • 创建了问题 3月12日