这道题目也挺水的,题目说的很清楚,判断是不是mirrored string的时候有些费事,但是也不算太费事。
建立一个数组,满足a数组,同时也满足b数组既是mirrored string。
不过这道题目有个地方很恶心人,就是每组数据之间有个空行,在这里WA了一次,我有点疑问,uva怎么不判断PE 啊,按照常理来说这样的错误应该是PE啊。
#include<stdio.h>
#include<string.h>
int is_p(char *str)
{int n,i;n=strlen(str);for(i=0;i<n/2;i++){if(str[i]!=str[n-i-1])return 0;}return 1;
}
int is_m(char *str)
{char a[21]="AEHIJLMOSTUVWXYZ12358";char b[21]="A3HILJMO2TUVWXY51SEZ8"; int i,j,n;n=strlen(str);if(n==1) {for(i=0;i<21;i++){if(str[0]==a[i])break;}if(i==21||str[0]!=b[i])return 0;elsereturn 1;}else{for(i=0;i<n/2+1;i++){for(j=0;j<21;j++){if(str[i]==a[j])break;}if(j==21||str[n-i-1]!=b[j])return 0;}return 1;}
}
int main()
{int n1,n2;char str[100000];while(gets(str)!=NULL){n1=is_p(str);n2=is_m(str);if(n1==1){if(n2==1)printf("%s -- is a mirrored palindrome.\n\n",str);elseprintf("%s -- is a regular palindrome.\n\n",str);}else{if(n2==1)printf("%s -- is a mirrored string.\n\n",str);elseprintf("%s -- is not a palindrome.\n\n",str);}}return 0;
}