题解 | #字符串修改#
字符串修改
https://ac.nowcoder.com/acm/contest/11232/A
题目大意:
给你一条字符串,奇数位的字母变成它的后一位字母(z->a),偶数位则变为前一位字母(a->z),问变换后的字符串?
(保证字符串只含小写字母)
思路:
依题意,很容易想到变换一定是在一条环上进行的,即:(前一个)a->z,(后一个)z->a。
那我们用类似约塞夫环的方法模拟。
- 奇数位处理,我们将原字符加1,因为要考虑环首尾相连,所以最后还要对26取模。
- 偶数位处理,依题意,我们先将原字符减1,考虑负数情况,我们将数再加2,因为要考虑环首尾相连,所以最后还要对26取模。
Code
#include <cstdio> #include <iostream> #include <cstring> using namespace std; const int N = 100010; int n, len, tmp; char s[N]; int main() { scanf("%d", &n); scanf("%s", s + 1); len = strlen(s + 1); for(int i = 1; i <= len; i++) { tmp = s[i] - 'a'; // cout<<(int('b' - 'a') - i + 1)%26<<endl; if(i & 1) cout<<char((tmp + i) % 26 + 97); else cout<<char(((tmp - i) % 26 + 26) % 26 + 97); } return 0; }