文章

【GESP】C++三级练习 luogu-B2113 输出亲朋字符串

GESP三级练习,字符串练习(C++三级大纲中6号知识点,字符串),难度★✮☆☆☆。

luogu-B2113 输出亲朋字符串

题目要求

题目描述

亲朋字符串定义如下:给定字符串 $s$ 的第一个字符的 ASCII 值加第二个字符的 ASCII 值,得到第一个亲朋字符;$s$ 的第二个字符加第三个字符得到第二个亲朋字符;依此类推。注意:亲朋字符串的最后一个字符由 $s$ 的最后一个字符 ASCII 值加 $s$ 的第一个字符的 ASCII 值。

输入格式

输入一行,一个长度大于等于 $2$,小于等于 $100$ 的字符串。

输出格式

输出一行,为变换后的亲朋字符串。输入保证变换后的字符串只有一行。

输入输出样例 #1

输入 #1

1
1234

输出 #1

1
cege

题目分析

解题思路

  1. 题目要求根据输入字符串,计算并输出亲朋字符串。

  2. 解题关键点:
    • 理解亲朋字符串的生成规则
    • 处理字符串的ASCII值相加
    • 特殊处理最后一个字符(需要与第一个字符相加)
    • 确保输出结果为一行字符串
  3. 具体思路:
    • 读取输入字符串s
    • 创建结果字符串,长度与输入字符串相同
    • 遍历字符串,对每个位置i:
      • 如果不是最后一个字符,将s[i]与s[i+1]的ASCII值相加
      • 如果是最后一个字符,将s[n-1]与s[0]的ASCII值相加
    • 输出结果字符串
  4. 时间复杂度分析:
    • 只需要遍历一次字符串,时间复杂度为O(n),其中n为字符串长度
    • 空间复杂度为O(n),需要存储结果字符串


示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <string>

int main() {
    // 定义字符串变量str用于存储输入
    std::string str;
    // 读取一行输入到str
    std::getline(std::cin, str);
    // 创建结果字符串r_str,初始化大小与输入字符串相同,用'\0'填充
    std::string r_str = std::string(str.size(), '\0');
    // 遍历字符串,计算亲朋字符
    for (int i = 0; i < str.size(); i++) {
        if (i == str.size() - 1) {
            // 最后一个字符特殊处理:最后一个字符ASCII值加上第一个字符ASCII值
            r_str[i] = str[str.size() - 1] + str[0];
        } else {
            // 其他位置:当前字符ASCII值加上下一个字符ASCII值
            r_str[i] = str[i] + str[i + 1];
        }
    }
    // 输出结果字符串
    std::cout << r_str;
    return 0;
}

所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code

GESP各级别考纲要点、知识拓展和练习题目清单详见C++学习项目主页

luogu-”系列题目已加入洛谷Java、C++初学团队作业清单,可在线评测,团队名额有限,欢迎加入。

bcqm-”系列题目可在编程启蒙题库进行在线评测。

本文由作者按照 CC BY 4.0 进行授权