题干:
 

小西突然觉得回文串是一种非常优雅的东西,她突然想要把身边所有的字符串都变成回文!

所谓回文串就是一个倒置后仍与自身相等的字符串,如“gxuacmmcauxg”和“gxuacmcauxg”。

 

小西不喜欢单身狗,所以小西只会处理长度为偶数的字符串。

小西也不喜欢肥宅,所以小西处理的字符串只有小写英文字母

但是小西是个肥宅,不怎么喜欢活动,所以小西对于每个字母只会将其变为与其相邻的字母,如‘b'可以变为'a'和'c','g'可以变为'f'和'h'。但是'a'只能变为'b',‘z’只能变为'y'。

小西虽然是肥宅,但也想要运动,所以她会把字符串的每一个字母都进行一次变换

_(:з」∠)_

现在请聪明的你来救救肥宅,判断小西能否将该字符串变为回文。

 

输入描述:


 

第一行为一个整数T,表示数据组数

接下来行为T组数据

每组数据第一行为一个整数n表示字符串的长度

第二行为小西将要处理的字符串

 

输出描述:

对于每组数据,若小西能够将其变为回文则输出一行一个数字1

否则输出一行一个数字0

 

示例1

输入

复制

2
2
zb
6
abccba

输出

复制

0
1

解题报告:

  第一位和最后一位特殊处理一下,剩下的一定差2,,第一次写成了差3了。。白WA一发。。按照题干处理就行了、

AC代码:

#include<bits/stdc++.h>

using namespace std;
char s[1005];
int len;
int main()
{
    int t;
    cin>>t;
    while(t--) {
        scanf("%d",&len);
        scanf("%s",s+1);
        if(len%2 == 1 || len != strlen(s+1)) {
            puts("0");continue;
        }
        int flag =1;
        for(int i = 1; i<=len; i++) {
            if(isupper(s[i])) flag = 0;
        }
        for(int i = 1; i<=(len); i++) {
            if(s[i] == 'a') {
                if(s[len-i+1] != 'a' && s[len-i+1] != 'c') flag=0;
            }
            if(s[i] == 'z') {
                if(s[len-i+1] != 'z' && s[len-i+1] != 'x') flag=0;
            }
        }
        if(flag == 0) {
            puts("0");continue;
        }
        for(int i = 1; i<=(len/2); i++) {
            if(s[i] == s[len-i+1]) continue;
            int d = len-i+1;
            if(abs(s[d]-s[i]) != 2) flag = 0;
        }
        if(flag == 0) {
            puts("0");
        }
        else puts("1");
    }
    
    return 0 ;
}