GESP2025年3月认证C++三级( 第三部分编程题(2、词频统计)

张开发
2026/4/3 20:17:10 15 分钟阅读
GESP2025年3月认证C++三级( 第三部分编程题(2、词频统计)
一、‍♂️ 故事背景单词王国选举大会在“单词王国”里 有很多单词来参加“最受欢迎单词”比赛 比如Apple banana apple Orange banana apple二、 任务 找出出现次数最多的单词 注意Apple apple APPLE不区分大小写三、算法分析 第一步判断标准 输入n个单词 输出出现次数最多的那个全部变小写 第二步用故事理解你是一个统计官 ‍♂️你拿着一本“记录本” 每看到一个单词就记下来apple → 1 banana → 1 第三步核心工具 —— map1、 什么是 map 就像一个“字典”单词 → 出现次数2、✏️ 举例mapstring, int cnt;表示apple → 3 banana → 2 第四步关键难点 —— 大小写统一1、 故事“Apple”和“apple”其实是同一个人 所以必须全部变成apple2、✏️ 方法transform(s.begin(), s.end(), s.begin(), ::tolower); 作用全部变小写 第五步一步一步执行1、 输入6 Apple banana apple Orange banana apple2、✏️ 过程第1个Apple → apple → cnt[apple] 1第2个banana → cnt[banana] 1第3个apple → cnt[apple] 2第4个Orange → orange → cnt[orange] 1第5个banana → cnt[banana] 2第6个apple → cnt[apple] 3 最终统计apple → 3 ⭐ banana → 2 orange → 1 第六步找最大值1、 再遍历一遍谁的次数最多2、 找到apple✏️ 第七步完整代码#include iostream #include map #include algorithm using namespace std; int main() { int n; cin n; mapstring, int cnt; int mx 0; string ans; for(int i 0; i n; i) { string s; cin s; // 全部变小写 transform(s.begin(), s.end(), s.begin(), ::tolower); cnt[s]; // 统计次数 // 更新最大值 if(cnt[s] mx) { mx cnt[s]; ans s; } } cout ans endl; return 0; }也可以手写一个字符串转小写函数#include iostream #include map #include string using namespace std; // 手动实现字符串转小写函数 string toLower(string s) { string result ; for (char c : s) { if (c A c Z) { result (c - A a); } else { result c; } } return result; } int main() { int n; cin n; mapstring, int cnt; int mx 0; string ans ; for (int i 0; i n; i) { string s; cin s; // 使用手动实现的转小写函数 string lower_s toLower(s); cnt[lower_s]; // 更新最大值和答案 if (cnt[lower_s] mx) { mx cnt[lower_s]; ans lower_s; } } cout ans endl; return 0; } 第八步运行结果输入6 Apple banana apple Orange banana apple输出apple 第九步核心总结1、 这题本质统计 找最大值2、 三个关键点① 用 map 统计cnt[s];② 统一大小写transform(..., ::tolower);③ 边统计边更新答案更高效if(cnt[s] mx)‍♂️ 记忆口诀单词统计用map 大小写要统一 边数边比找最大

更多文章