题解
2026-02-26 12:52:16
发布于:浙江
4阅读
0回复
0点赞
题目解析
- 输入输出:第一行输入整数 表示字符串长度,第二行输入字符串 (仅含大小写字母)。输出一个整数,表示按规则计算得到的加密前整数。
- 数据范围:,字符串长度等于 。
- 复杂度要求:需要线性扫描字符串,时间复杂度 ,空间复杂度 (不计字符串存储)。
- 算法知识点:
字符串处理、字符类型判断、ASCII码运算
思路解析
- 分类处理:遍历字符串中每个字符,根据大小写分别计算贡献值:
- 小写字母:利用
s[i] - 'a' + 1计算其在字母表中的位置(a对应 ,b对应 ,依此类推)。 - 大写字母:直接取其 ASCII 码值的相反数,即
-s[i](或代码中的ans -= int(s[i]))。
- 小写字母:利用
- 累加求和:维护一个累加器
ans,将每个字符的贡献值累加,最终得到结果。 - 边界处理:数据范围 ,累加结果最坏情况下约为 (全小写)或 (全大写),在 32 位整数范围内,无需使用
long long。
完整代码
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
string s;
cin >> n >> s;
int ans = 0;
// 遍历每个字符,根据大小写分类计算
for (int i = 0; i < n; i++) {
if (islower(s[i])) {
// 小写字母:计算在字母表中的位置 (1-26)
ans += s[i] - 'a' + 1;
} else {
// 大写字母:减去其ASCII码值(相当于加上负数)
ans -= int(s[i]);
}
}
cout << ans << endl;
return 0;
}
这里空空如也

有帮助,赞一个