题解 | #字符串修改#

字符串修改

https://ac.nowcoder.com/acm/contest/11232/A

题目大意:

给你一条字符串,奇数位的字母变成它的后一位字母(z->a),偶数位则变为前一位字母(a->z),问变换后的字符串?
(保证字符串只含小写字母)

思路:

依题意,很容易想到变换一定是在一条环上进行的,即:(前一个)a->z,(后一个)z->a。
那我们用类似约塞夫环的方法模拟。

  1. 奇数位处理,我们将原字符加1,因为要考虑环首尾相连,所以最后还要对26取模。
  2. 偶数位处理,依题意,我们先将原字符减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;
}
全部评论

相关推荐

点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务