UVa401 Palindromes 回文词
题目链接:UVa401
题目描述
输入格式
输出格式
题目翻译
输入是一个字符串,判断它是否为回文串以及镜像串。输入字符串保证不含数字0 。所谓回文串,就是反转以后和原串相同,如abba和madam 。所谓镜像串,就是左右镜像之后和原串相同,如2S 和3AIAE 。注意,并不是每个字符在镜像之后都能得到一个合法字符。在本题中,每个合法字符的镜像如上表所示。
输入的每行包含一个字符串(保证只有上述字符,不含空白字符),判断它是否为回文串和镜像串(共4种组合)。
题目分析
本题的关键在于将每个符号的原值与其镜像值一一对应,一般来说,对于题目中已经给出全部情况对应值的问题,可以直接采用打表的方式节约时间。
Code
#include<cstdio>
#include<cstring>
using namespace std;
char rev[]={"A 3 HIL JM O 2TUVMXY51SE Z 8 "};
char s[30];
char r(char ch)
{
if(ch>='A' && ch<='Z') return rev[ch-'A'];
else return rev[ch-'0'+25];
}
int main()
{
while(~scanf("%s",s))
{
int len=strlen(s);
int p=1,m=1;
for(int i=0;i<(len+1)/2;i++)
{
if(s[i]!=s[len-i-1]) p=0;
if(r(s[i])!=s[len-i-1]) m=0;
}
printf("%s -- is ",s);
if(m==0 && p==0) printf("not a palindrome.\n\n");
if(p==1 && m==0) printf("a regular palindrome.\n\n");
if(p==0 && m==1) printf("a mirrored string.\n\n");
if(p==1 && m==1) printf("a mirrored palindrome.\n\n");
}
return 0;
}
以上就是《UVa401 Palindromes 回文词》的详细题解,如果您认为我的文章对您起到了帮助作用,恳请点赞关注支持一下,您的鼓励就是我前进的最大动力。
我是Horseman:一名正在成长的蒟蒻OIer,UVa题解系列持续更新中,感谢大家的鼓励支持。