2025-辽宁-复赛-第一题, 字符串数数(count)
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 的整型数组
复杂度分析
字符串长度为 ( 量级)。- 时间复杂度:,线性扫描一次字符串,再输出 26 个数。
- 空间复杂度:,仅使用一个固定大小的计数数组。
边界与细节
- 输入可能为空串,此时 26 行全为 0。
- 输出严格按
a~z顺序,不能遗漏、不能多行、不能带额外空格。 - 使用
freopen读写文件,符合复赛要求。
示例代码
#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; // 程序正常结束
}附:样例和测试数据下载地址:
链接:https://pan.quark.cn/s/f8ec0cb6b88d?pwd=Xvaj 提取码:Xvaj
本文由coderli.com原创,按照CC BY-NC-SA 4.0 进行授权
所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code
“luogu-”系列题目可在 洛谷题库 在线评测。
“bcqm-”系列题目可在 编程启蒙题库 在线评测。
GESP/CSP认证交流QQ群: 688906745
GESP/CSP 认证学习微信公众号

最后更新于