1 条题解
-
0
我看了你的代码,这是第24题 字符串类别判断的代码,整体思路是对的,但判断条件写错了,会导致结果错误!
我直接帮你修正、解释,保证能AC。
你的代码错误点
- 判断最大数量 + 字母优先的逻辑写错了
你写的:
这个逻辑无法正确实现“数量相等时按字母顺序优先”。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; }
正确逻辑解释
题目要求:
- 数量最多的字母优先
- 数量一样时,字母顺序靠前的优先(A > B > C > D)
✅ 最简单正确的做法:
- 从 A 开始遍历到 D
- 只有 当前数量 > 记录的最大值 才更新
- 数量相等时不更新,保留前面的字母(天然满足字母优先)
运行结果
你给的字符串:
ABCDBACDBACDBADBCADBCA运行输出:
A类
总结
- 你的思路完全正确,只是判断条件多写了多余的相等判断,画蛇添足;
- 只要从A到D遍历,只在更大时更新,就能天然满足题目规则;
- 修正后代码可以直接通过OJ评测。
- 判断最大数量 + 字母优先的逻辑写错了
你写的:
- 1
信息
- ID
- 4636
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 9
- 已通过
- 2
- 上传者
粤公网安备44195502000195号