【CSP】CSP-XL 2025辽宁复赛真题-第一题, 字符串数数(count)(字符串考点,相当于GESP三级)
CSP-XL 2025辽宁复赛真题-第一题,字符串考点,相当于GESP三级,难度⭐★☆☆☆。
CSP-XL 2025辽宁复赛真题-第一题, 字符串数数(count)
题目要求
题目分析
解题思路
题意梳理
给定一个仅由小写字母构成的字符串,要求统计每个字母出现的次数,并按字母表顺序依次输出 26 行结果。
共 26 行,第 1 行是a的个数,第 2 行是b的个数,其余字母均为 0。- 算法选择
- 开一个长度为 26 的整型数组
cnt,初始全 0。 - 遍历字符串,对字符
c执行cnt[c-'a']++。 - 最后顺序输出
cnt[0..25],每行一个数字。
- 开一个长度为 26 的整型数组
- 复杂度分析
字符串长度为 $n$($n\le 10^5$ 量级)。- 时间复杂度:$O(n + 26)$,线性扫描一次字符串,再输出 26 个数。
- 空间复杂度:$O(26)$,仅使用一个固定大小的计数数组。
- 边界与细节
- 输入可能为空串,此时 26 行全为 0。
- 输出严格按
a~z顺序,不能遗漏、不能多行、不能带额外空格。 - 使用
freopen读写文件,符合复赛要求。
示例代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
int count_ary[26] = {}; // 初始化26个字母的计数数组,全部置0
int main() {
freopen("count.in", "r", stdin); // 重定向标准输入,从文件count.in读取数据
freopen("count.out", "w", stdout); // 重定向标准输出,结果写入count.out
std::string str; // 存储输入的字符串
std::cin >> str; // 读取字符串
// 遍历字符串,统计每个小写字母出现次数
for (int i = 0; i < str.length(); i++) {
count_ary[str[i] - 'a']++; // 将字符映射到0~25,对应计数器加1
}
// 按字母顺序输出26个计数,每行一个
for (int i = 0; i < 26; i++) {
std::cout << count_ary[i] << "\n";
}
return 0; // 程序正常结束
}
所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code
GESP 学习专题站:GESP WIKI
“luogu-”系列题目可在洛谷题库进行在线评测。
“bcqm-”系列题目可在编程启蒙题库进行在线评测。
欢迎加入:Java、C++、Python技术交流QQ群(982860385),大佬免费带队,有问必答
欢迎加入:C++ GESP/CSP认证学习QQ频道,考试资源总结汇总
欢迎加入:C++ GESP/CSP学习交流QQ群(688906745),考试认证学员交流,互帮互助
本文由作者按照 CC BY-NC-SA 4.0 进行授权


