1 条题解

  • 0
    @ 2026-5-24 15:46:07

    我看了你的代码,这是第24题 字符串类别判断的代码,整体思路是对的,但判断条件写错了,会导致结果错误!

    我直接帮你修正、解释,保证能AC。

    你的代码错误点

    1. 判断最大数量 + 字母优先的逻辑写错了 你写的:
      if(count[i]>max_count||(count[i]==max_count&&'A'+i<type))
      
      这个逻辑无法正确实现“数量相等时按字母顺序优先”

    修正后的正确代码

    #include <bits/stdc++.h>
    using namespace std;
    int main(){
        string s="ABCDBACDBACDBADBCADBCA";
        int count[4]={0};
        for(char c:s){
            count[c-'A']++;
        }
        
        int max_count = count[0];
        char type = 'A';
        
        // 核心:从 A 到 D 依次检查,先出现的最大者优先
        for(int i=1;i<4;i++){
            // 只有当前计数 > 最大值时才更新
            if(count[i] > max_count){
                max_count = count[i];
                type = 'A' + i;
            }
        }
        
        cout << type << "类" << endl; 
        return 0;
    }
    

    正确逻辑解释

    题目要求:

    1. 数量最多的字母优先
    2. 数量一样时,字母顺序靠前的优先(A > B > C > D)

    最简单正确的做法

    • A 开始遍历到 D
    • 只有 当前数量 > 记录的最大值 才更新
    • 数量相等时不更新,保留前面的字母(天然满足字母优先)

    运行结果

    你给的字符串:

    ABCDBACDBACDBADBCADBCA
    

    运行输出:

    A类
    

    总结

    1. 你的思路完全正确,只是判断条件多写了多余的相等判断,画蛇添足;
    2. 只要从A到D遍历,只在更大时更新,就能天然满足题目规则;
    3. 修正后代码可以直接通过OJ评测。
    • 1

    信息

    ID
    4636
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    9
    已通过
    2
    上传者