【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
题目分析
解题思路
题目要求根据输入字符串,计算并输出亲朋字符串。
- 解题关键点:
- 理解亲朋字符串的生成规则
- 处理字符串的ASCII值相加
- 特殊处理最后一个字符(需要与第一个字符相加)
- 确保输出结果为一行字符串
- 具体思路:
- 读取输入字符串s
- 创建结果字符串,长度与输入字符串相同
- 遍历字符串,对每个位置i:
- 如果不是最后一个字符,将s[i]与s[i+1]的ASCII值相加
- 如果是最后一个字符,将s[n-1]与s[0]的ASCII值相加
- 输出结果字符串
- 时间复杂度分析:
- 只需要遍历一次字符串,时间复杂度为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 进行授权