回文词
Palindromes为UVa上的一道训练题,题号为401。题目大意为输入一个字符串让你判断它是否为回文字符串或者是镜像串(mirrored string)。回文串就是从左到右从右到左都是一样的,如OKKO;镜像串就是左右镜像之后字符相同,如3E,JOOL等。以下为镜像串的说明:
样例输入:
NOTAPALINDROME
ISAPALINILAPASI
2A3MEAS
ATOYOTA
样例输出:
NOTAPALINDROME -- is not a palindrome.
ISAPALINILAPASI -- is a regular palindrome.
2A3MEAS -- is a mirrored string.
ATOYOTA -- is a mirrored palindrome.
分析: 判断回文词比较好处理,直接if语句里判断就行。而判断是否为镜像串的时候,还是要用到常量数组,而且本题为了方便阅读,增加了一个函数mirror()。
代码如下(C语言)
#include<stdio.h>
#include<string.h>
#include<ctype.h>
const char * t = "A 3 HIL JM O 2TUVWXY51SE Z 8 ";
const char * info[] = {" is not a palindrome.", " is regular palindrome.", " is a mirrored string."," is a mirrored palindrome."};
char mirror(char c){ //输出镜像符号
if(isalpha(c)) return t[c-'A'];
else return t[c-'0'+25];
}
int main(){
char s[101];
while(scanf("%s",s)==1){
int n=strlen(s),one=1,two=1;
for(int i=0; i<(n+1)/2; i++){
if(s[i]!=s[n-1-i]) one=0;
if(mirror(s[i])!=s[n-1-i]) two=0;
}
printf("%s --%s\n\n",s,info[one+2*two]);
}
return 0;
}
博主每天都会更新算法方面或者关于计算机其他方面的blog,大家如果有什么建议或者有更好的思路方法,可以先关注一下博主并在blog下方留言,我会及时回复的,相互学习呀~
(如果博客对您有些许帮助的话,点个赞吧(▽))