B3956 [GESP202403 三级] 字母求和

[GESP202403 三级] 字母求和

题目描述

小杨同学发明了一种新型密码,对于每一个小写英文字母,该小写字母代表了一个正整数,即该字母在字母顺序中的位置,例如字母 a 代表了正整数 1 1 1,字母 b 代表了正整数 2 2 2;对于每一个大写英文字母,该大写字母代表了一个负整数,即该字母的 ASCII 码的相反数,例如字母 A 代表了负整数 − 65 -65 65。小杨同学利用这种放缩对一个整数进行了加密并得到了一个由大写字母和小写字母组成的字符串,该字符串中每个字母所代表数字的总和即为加密前的整数,例如 aAc 对应的加密前的整数为 1 + ( − 65 ) + 3 = − 61 1+(-65)+3=-61 1+(65)+3=61

对于给定的字符串,请你计算出它对应的加密前的整数是多少。

输入格式

第一行一个正整数 n n n,表示字符串中字母的个数。
第二行一个由大写字母和小写字母的字符串 T,代表加密后得到的字符串。

输出格式

输出一行一个整数,代表加密前的整数。

样例 #1

样例输入 #1

3
aAc

样例输出 #1

-61

提示

对全部的测试数据,保证 1 ≤ n ≤ 1 0 5 1 \leq n \leq 10^5 1n105

方法1
解题思路

本题要求我们计算给定字符串中每个字母所代表数字的总和。根据题目描述,对于小写字母,其代表的是字母在字母表中的位置;对于大写字母,其代表的是字母的 ASCII 码的相反数。

我们可以遍历字符串中的每个字符,判断其是大写字母还是小写字母,并计算相应的数值,累加到总和中。

具体步骤如下:

  1. 定义变量 sum,用于存储字母所代表数字的总和,初始化为 0。

  2. 遍历字符串中的每个字符 c:

    • 如果 c 是小写字母,将 c - 'a' + 1 的值加到 sum 上。
    • 如果 c 是大写字母,将 -(c) 的值加到 sum 上。
  3. 输出 sum 的值作为答案。

C++代码

#include <string>
#include <iostream>
using namespace std;

int main() {
    int n;
    string T;
    cin >> n >> T;
    
    int sum = 0;
    
    for (char c : T) {
        if (islower(c)) {
            sum += c - 'a' + 1;
        } else {
            sum -= c;
        }
    }
    
    cout << sum << endl;
    
    return 0;
}

代码解释

  1. 首先,我们读取字符串的长度 n 和字符串 T

  2. 定义变量 sum,用于存储字母所代表数字的总和,初始化为 0。

  3. 使用范围循环遍历字符串 T 中的每个字符 c

  4. 对于每个字符 c,使用 islower(c) 函数判断其是否为小写字母:

    • 如果是小写字母,将 c - 'a' + 1 的值加到 sum 上。这里 c - 'a' + 1 计算的是字母 c 在字母表中的位置。
    • 如果是大写字母,将 -(c) 的值加到 sum 上。这里 -(c) 表示字母 c 的 ASCII 码的相反数。
  5. 输出 sum 的值作为答案。

复杂度分析

  • 时间复杂度: O ( n ) O(n) O(n),其中 n n n 是字符串的长度。我们需要遍历字符串中的每个字符。

  • 空间复杂度: O ( 1 ) O(1) O(1)。我们只使用了常数级别的额外空间。

输入输出样例

输入:

3
aAc

输出:

-61

该解决方案通过遍历字符串中的每个字符,判断其是大写字母还是小写字母,并计算相应的数值,最终得到字母所代表数字的总和。时间复杂度为 O ( n ) O(n) O(n),空间复杂度为 O ( 1 ) O(1) O(1)

方法2

C++代码

#include <iostream>
#include <string>
using namespace std;

int main() {
    int n;
    string T;
    cin >> n >> T;
    
    int sum = 0;
    
    for (char c : T) {
        if (c >= 'a' && c <= 'z') {
            sum += c - 'a' + 1;
        } else {
            sum -= c;
        }
    }
    
    cout << sum << endl;
    
    return 0;
}

代码解释

在这个修改后的代码中,我们只改变了判断字符是大写字母还是小写字母的条件:

if (c >= 'a' && c <= 'z') {
    sum += c - 'a' + 1;
} else {
    sum -= c;
}
  • 如果字符 c 的 ASCII 码在 ‘a’ 到 ‘z’ 的范围内,说明它是小写字母,我们将 c - 'a' + 1 的值加到 sum 上。
  • 否则,字符 c 是大写字母,我们将 -(c) 的值加到 sum 上。

这种方式直接使用字符的 ASCII 码进行判断,避免了使用 islower 函数。

其他部分的代码保持不变。

复杂度分析

  • 时间复杂度: O ( n ) O(n) O(n),其中 n n n 是字符串的长度。我们需要遍历字符串中的每个字符。

  • 空间复杂度: O ( 1 ) O(1) O(1)。我们只使用了常数级别的额外空间。

输入输出样例

输入:

3
aAc

输出:

-61

这种修改只是改变了判断字符是大写字母还是小写字母的方式,使用字符的 ASCII 码进行判断,而不依赖于 islower 函数。代码的整体逻辑和复杂度分析保持不变。

  • 16
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
GESP(Global Engineering Software Proficiency)是一种全球认可的工程软件能力认证标准,而Python则是一种高级编程语言。根据题目要求回答,以下是关于GESP Python三级认证试卷6月的一些说明。 GESP Python三级认证试卷是一种考核Python编程能力的专业认证试卷,在 6 月份进行。这个认证试卷旨在评估考生在使用Python语言和相关工具进行软件开发和解决问题方面的能力。 考试内容通常包括理论知识和实际编程题。理论部分可能包括Python语言的基础知识、面向对象编程、异常处理、模块和包管理、文件处理等方面的问题。考生需要能够准确回答这些问题,展示对Python语言的深入理解。 而实际编程题目则是考察考生在Python语言下解决问题的能力。这些题目可能涉及数据结构算法、字符串处理、文件读写、数据库操作、网络编程等方面的内容。考生需要使用Python编写合适的代码,解决给定的问题。 GESP Python三级认证试卷的通过要求通常会根据不同考试中心的具体规定而有所不同。一般来说,考生需要在规定的时间内完成试卷,并达到一定的分数线才能获得认证。通过这个认证可以证明考生在Python编程方面具备较高的能力和经验,对于就业或者继续深入学习都有很大的帮助。 对于想要参加GESP Python三级认证试卷的考生来说,平时需要加强对Python语言的学习和实践,掌握相关的开发工具和库。还可以参加相关的培训课程和模拟考试,提前了解考试的要求和内容,这样可以更好地应对考试的挑战。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天秀信奥编程培训

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值