优化题解(26行)
2025-04-28 06:08:53
发布于:四川
3阅读
0回复
0点赞
/*
解题步骤如下:
1.根据题意定义变量并录入数据。
2.遍历字符串。
3.字符不做处理而直接输出的情况:
(1)字符不等于减号;
(2)字符位于第一个或最后一个位置时;
(3)字符前一个字符或后一个字符是减号时;
(4)字符后一个字符的ASCII 码值小于等于字符前一个字符的ASCII 码值。
4.字符需做处理输出的情况:
(1)字符前一个字符和后一个字符均是数字(不是字母);
(2)字符前一个字符和后一个字符均是字母(不是数字)。
5.字符需做处理输出的处理方法:
有两种处理方法,一种方法是一边判断一边输出,另一种方法是先将输出内容生成一个临时字符串后再输出,后一种方法对于逆序输出最为方便,故解本题采用后一种方法;
(1)字符后一个字符与前一个字符相邻时,不输出任何内容;
(2)定义一个临时字符串;
(3)按照正常顺序生成临时字符串;
(4)当p3=2 时,将生成的临时字符串顺序反转;
(5)输出临时字符串。
6.其他字符不做处理而直接输出的情况:
*/
#include<bits/stdc++.h>
using namespace std;
int main() {
int p1, p2, p3;
string s;
cin >> p1 >> p2 >> p3 >> s;
for (int i = 0; i < s.size(); i++) {
if (s[i] != '-' || !i || i == s.size() - 1 || s[i-1] == '-' || s[i+1] == '-' || s[i+1] <= s[i-1])
cout << s[i];
else if((s[i-1] < 65 && s[i+1] < 65) || (s[i-1] > 64 && s[i+1] > 64)) {
if (s[i+1] - s[i-1] == 1) continue;
string t = "";
for (int j = s[i-1] + 1; j <= s[i+1] - 1; j++) {
for (int k = 1; k <= p2; k++) {
if (p1 == 3) t += "*";
else if (p1 == 2 && s[i-1] > 64) t += char(j-32);
else t += char(j);
}
}
if (p3 == 2) reverse(t.begin(), t.end());
cout << t;
}
else cout << s[i];
}
return 0;
}
这里空空如也
有帮助,赞一个