GESP2024年3月认证C++三级( 第三部分编程题(1、字母求和)


🎯 第三部分 编程题第一题:《字母求和》


一、🏰 故事开始:神秘密码森林

小杨同学发明了一种神奇密码!

在森林里,每个字母都代表一个数字:


1、🌱 小写字母(好精灵)

小写字母代表它在字母表中的位置:

复制代码
a = 1
b = 2
c = 3
...
z = 26

2、🌋 大写字母(火焰精灵)

大写字母代表它自己的 ASCII 编码的负数:

复制代码
'A' = -65
'B' = -66
'C' = -67

3、🎯 任务

给你一个字符串,求所有字母代表数字的总和!


4、🌰 例子

输入:

复制代码
3
aAc

意思是:

字符串长度是3,内容是:

复制代码
a A c

5、分别计算:

🌱 a

复制代码
a =1

🌋 A

ASCII:

复制代码
A =65

所以:

复制代码
A = -65

🌱 c

复制代码
c =3

总和:

复制代码
1 + (-65) + 3 = -61

6、✅ 输出

复制代码
-61

二、🧠 解题思路

我们要一个一个检查字符串里的字母。

1、就像机器人巡逻队:


🚶 第一步:读取输入

复制代码
int n;
string s;
cin >> n >> s;

🚶 第二步:准备答案盒子

复制代码
int sum = 0;

🚶 第三步:逐个检查字母

复制代码
for(int i=0;i<n;i++)

2、🔍 判断字母类型


(1)🌱 如果是小写字母

复制代码
if(s[i]>='a' && s[i]<='z')

(2)怎么算位置?

复制代码
s[i]-'a'+1

(3)为什么?

例如:

复制代码
'c'-'a'+1
=99-97+1
=3

3、🌋 如果是大写字母

复制代码
else

(加上负值)等于直接减去它的 ASCII 值:

复制代码
sum -= s[i];


三、🎁 参考程序

复制代码
#include<iostream>
#include<string>
using namespace std;

int main()
{
    int n;
    string s;
    
    cin >> n;
    cin >> s;
    
    int sum = 0;
    
    for(int i = 0; i < n; i++)
    {
        if(s[i] >= 'a' && s[i] <= 'z')
        {
            sum += s[i] - 'a' + 1;
        }
        else if(s[i] >= 'A' && s[i] <= 'Z')
        {
            sum -= s[i];
        }
    }
    
    cout << sum << endl;
    
    return 0;
}

四、🎮 程序运行演示

输入:

复制代码
4
abCZ

计算过程:

复制代码
a =1
b =2
C =-67
Z =-90

总和:

复制代码
1+2-67-90=-154

输出:

复制代码
-154

五、本题用到的知识


1、✅ 字符判断

复制代码
'a'~'z'
'A'~'Z'

2、✅ ASCII编码

字符本质上是数字!

复制代码
'A' =65

3、✅ for循环遍历字符串

复制代码
for(...)

4、✅ 累加思想

一个一个加进 sum。


🌟 更快速的写法(进阶)

大写小写直接使用函数判断:

复制代码
if(islower(s[i])) ...
if(isupper(s[i])) ...

🎉 总结

本题就是要:

👉 遍历字符串

👉 判断大小写

👉 转成数字

👉 累加输出


相关推荐
故事和你9119 小时前
洛谷-数据结构1-1-线性表1
开发语言·数据结构·c++·算法·leetcode·动态规划·图论
脱氧核糖核酸__19 小时前
LeetCode热题100——53.最大子数组和(题解+答案+要点)
数据结构·c++·算法·leetcode
脱氧核糖核酸__20 小时前
LeetCode 热题100——42.接雨水(题目+题解+答案)
数据结构·c++·算法·leetcode
王老师青少年编程21 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【线性扫描贪心】:数列分段 Section I
c++·算法·编程·贪心·csp·信奥赛·线性扫描贪心
王老师青少年编程21 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【线性扫描贪心】:分糖果
c++·算法·贪心算法·csp·信奥赛·线性扫描贪心·分糖果
leaves falling21 小时前
C++模板进阶
开发语言·c++
无敌昊哥战神21 小时前
【保姆级题解】力扣17. 电话号码的字母组合 (回溯算法经典入门) | Python/C/C++多语言详解
c语言·c++·python·算法·leetcode
脱氧核糖核酸__21 小时前
LeetCode热题100——238.除了自身以外数组的乘积(题目+题解+答案)
数据结构·c++·算法·leetcode
ouliten1 天前
C++笔记:std::invoke
c++·笔记
j_xxx404_1 天前
C++算法:哈希表(简介|两数之和|判断是否互为字符重排)
数据结构·c++·算法·leetcode·蓝桥杯·力扣·散列表