#include<cstdio>
#include<cstring>
#define MAXN 1010
char *origin = "AEHIJLMOSTUVWXYZ12358";
char *change = "A3HILJMO2TUVWXY51SEZ8";
bool is_palindrome(char *str)
{
int len = strlen(str);
for(int i = 0; i < len/2; i++)
if(str[i] != str[len-i-1])
return false;
return true;
}
bool is_mirrored(char *str)
{
int len = strlen(str);
int len2 = strlen(origin);
int i, j;
for(i = 0; i < len/2+1; i++)
{
for(j = 0; j < len2; j++)
{
if(str[i] == origin[j])
break;
}
if(change[j] != str[len-i-1])
return false;
}
return true;
}
char s[MAXN];
int main()
{
while(~scanf("%s", s))
{
printf("%s", s);
if(!is_palindrome(s) && !is_mirrored(s))
printf(" -- is not a palindrome.\n\n");
else if(is_palindrome(s) && !is_mirrored(s))
printf(" -- is a regular palindrome.\n\n");
else if(!is_palindrome(s) && is_mirrored(s))
printf(" -- is a mirrored string.\n\n");
else
printf(" -- is a mirrored palindrome.\n\n");
}
}
理解题意:
回文:不多说啦,从左往右与从右往左读是一样的;
镜像:根据题中的Reverse表,从左往右读取,将相应的字符进行转换,与从右往左读取的原字符进行比较,若均符合相等,则为镜像。