题目大意:
给你一条字符串,奇数位的字母变成它的后一位字母(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;
}
京公网安备 11010502036488号