题干:
小西突然觉得回文串是一种非常优雅的东西,她突然想要把身边所有的字符串都变成回文!
所谓回文串就是一个倒置后仍与自身相等的字符串,如“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 ;
}