UVA 401 Palindromes

来源:互联网 发布:linux oracle安装教程 编辑:程序博客网 时间:2024/06/06 00:18

题目要求:给一个字符串,判断其为回文串,或是镜像串,或是两者都有,或是两者都无。。。。镜像串题目有解释:即一个字符串从左到右读出来和从右到左是一样的。比如“E”和“3”就是可以的。题中附表格。其中说明0和O是一样的,所以将0视为非法字符。

CharacterReverseCharacterReverseCharacterReverseAAMMYYB N Z5C OO11D P 2SE3Q 3EF R 4 G S25ZHHTT6 IIUU7 JLVV88K WW9 LJXX  这个题目如果WA,可以考虑ABA,AOA这种情况,第一个是普通的回文串,第二个则是回文镜像串。


#include<stdio.h>#include<string.h>int check(char a,char b){if(a==b&&(a=='A'||a=='H'||a=='I'||a=='M'||a=='O'||a=='T'||a=='U'||a=='U'||a=='V'||a=='W'||a=='X'||a=='Y'||a=='1'||a=='8'))return 1;if((a=='E'&&b=='3')||(a=='3'&&b=='E'))return 1;if((a=='J'&&b=='L')||(a=='L'&&b=='J'))return 1;if((a=='S'&&b=='2')||(a=='2'&&b=='S'))return 1;if((a=='Z'&&b=='5')||(a=='5'&&b=='Z'))return 1;if((a=='0'&&b=='O')||(a=='O'&&b=='0'))return 1;return 0;}int main(){char str[1005];int l,i,j,k,t1,t2,f,x;while(scanf("%s",str)!=EOF){t1=t2=f=x=0;l=strlen(str);if(l%2==1)x=1;for(i=0;i<l/2;i++){ if(check(str[i],str[l-1-i])){f=2;t2=1;}else {f=0;break;}}if(f==2){for(i=0;i<l-1-i;i++){if(str[i]==str[l-1-i])f=3;else { f=2;break;}}}else {for(i=0;i<l-1-i;i++){if(str[i]==str[l-i-1])f=1;else {f=0;break;}}}    if(l==1){    if(check(str[0],str[0]))    printf("%s -- is a mirrored palindrome.\n\n",str);    else printf("%s -- is a regular palindrome.\n\n",str);    continue;    }    if(x){    if(f==2){    if(!check(str[l/2],str[l/2]))f=0;    }    if(f==3){    if(!check(str[l/2],str[l/2]))f=1;    }    }if(f==0)printf("%s -- is not a palindrome.\n",str);if(f==1)printf("%s -- is a regular palindrome.\n",str);if(f==2)printf("%s -- is a mirrored string.\n",str);if(f==3)printf("%s -- is a mirrored palindrome.\n",str);printf("\n");}return 0;}


0 0
原创粉丝点击